SP_implementacije i main_josip lepan


/ Published in: C++
Save to your folder(s)



Copy this code and paste it in your HTML
  1. //Implementacija binarnog stabla preko polja
  2.  
  3. struct element{
  4. int label;
  5. int used;
  6. };
  7. struct tr{
  8. element elements[10000];
  9. };
  10.  
  11. int ParentT(int n,tr *tree){
  12. if(n==1) return -1;
  13. else{
  14. if(!(n%2))return (n/2);
  15. else return ((n-1)/2);
  16. }
  17. }
  18.  
  19. int LeftChildT(int n,tr *tree){
  20. if(tree->elements[2*n].used) return 2*n;
  21. else cout << "Cvor " << n << " nema lijevo dijete." << endl;
  22. }
  23.  
  24. int RightChildT(int n,tr *tree){
  25. if(tree->elements[(2*n)+1].used) return ((2*n)+1);
  26. else cout << "Cvor " << n << " nema desno dijete." << endl;
  27. }
  28. int LabelT(int n,tr *tree){
  29. if(tree->elements[n].used) return tree->elements[n].label;
  30. else cout << "Cvor ne postoji." << endl;
  31. }
  32.  
  33. int ChangeLabelT(int x, int n, tr *tree){
  34. if(tree->elements[n].used) tree->elements[n].label=x;
  35. else cout << "Cvor ne postoji u stablu." << endl;
  36. }
  37.  
  38. int RootT(tr *tree){
  39. if(tree->elements[0].used) return 1;
  40. else cout << "Stablo nema korijen, ne postoji!" << endl;
  41. }
  42.  
  43. int CreateLeftT(int x, int n, tr *tree){
  44. if(tree->elements[2*n].used==1) cout << "Cvor je vec popunjen" << endl;
  45. else {
  46. tree->elements[2*n].label=x;
  47. tree->elements[2*n].used=1;
  48. }
  49. }
  50.  
  51. int CreateRightT(int x, int n, tr *tree){
  52. if(tree->elements[(2*n)+1].used)cout << "Cvor vec ima desno dijete" << endl;
  53. else{
  54. tree->elements[(2*n)+1].label=x;
  55. tree->elements[(2*n)+1].used=1;
  56. }
  57. }
  58. int ExistsLeftChild(int n,tr *tree){
  59. if(tree->elements[n*2].used) return 1;
  60. else return -1;
  61. }
  62. int ExistsRightChild(int n, tr *tree){
  63. if(tree->elements[(2*n)+1].used) return 1;
  64. else return -1;
  65. }
  66.  
  67. int DeleteT(int n, tr *tree){
  68. int brl_cvora=1;
  69. int brd_cvora=1;
  70. if(tree->elements[n].used){
  71.  
  72. while(ExistsLeftChild(brl_cvora,tree)==1) brl_cvora=2*brl_cvora;
  73. for(brl_cvora;brl_cvora>n;brl_cvora/2)tree->elements[brl_cvora].used=0;
  74. while(ExistsRightChild(brd_cvora,tree)==1) brd_cvora=(brd_cvora*2)+1;
  75. for(brd_cvora;brd_cvora>n;(brd_cvora-1)/2) tree->elements[brd_cvora].used=0;
  76. }
  77. tree->elements[n].used=0;
  78. }
  79. int InitT(int x, tr *tree){
  80. if(tree->elements[0].used)
  81. for(int i=9999;i>=0;i--){
  82. tree->elements[i].used=0;
  83. }
  84. tree->elements[0].label=x;
  85. tree->elements[0].used=1;
  86. }
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97. //Implementacija binarnog stabla preko pokazivaca
  98.  
  99. struct element{
  100. int label;
  101. element *left,*right;
  102. };
  103. typedef struct element *elem;
  104.  
  105. elem ParentT(int n, element *tree){
  106. element *tekucil=tree->left;
  107. element *tekucid=tree->right;
  108. bool nadjen =false;
  109. while(tekucil){
  110. if(tekucil->label==n) return tekucil;
  111. tekucil=tekucil->left;
  112. }
  113. if(!tekucil){
  114. while(tekucid){
  115. if(tekucid->label==n) return tekucid;
  116. tekucid=tekucid->right;
  117. }
  118. }
  119. if(!tekucid && !tekucil) cout << "Cvor ne postoji u stablu!" << endl;
  120. }
  121.  
  122. elem LeftChildT(element *n, element *tree){
  123. return n->left;
  124. }
  125. elem RightChildT(element *n, element *tree){
  126. return n->right;
  127. }
  128. int LabelT(element *n, element *tree){
  129. return n->label;
  130. }
  131. int ChangeLabelT(int x, element *n, element *tree){
  132. n->label=x;
  133. }
  134. elem RootT(element *tree){
  135. return tree;
  136. }
  137. elem CreateLeftT(int x, element *n, element *tree){
  138. if(n->left==NULL){
  139. element *novi;
  140. novi=new element;
  141. n->left=novi;
  142. novi->left=NULL;
  143. novi->right=NULL;
  144. novi->label=x;
  145. }
  146. else cout << "Lijevi cvor vec postoji!" << endl;
  147. }
  148. elem CreateRightT(int x,element *n, element *tree){
  149. if(n->right==NULL){
  150. element *novi;
  151. novi=new element;
  152. n->right=novi;
  153. novi->left=NULL;
  154. novi->right=NULL;
  155. novi->label=x;
  156. }
  157. else cout << "Desni cvor je vec popunjen." << endl;
  158. }
  159. elem DeleteT(element *n, element *tree){
  160. element *tekucil;
  161. tekucil=n->left;
  162. while(tekucil){
  163. while(tekucil->left!=NULL)tekucil=tekucil->left;
  164. delete tekucil;
  165. while(tekucil->right!=NULL)tekucil=tekucil->right;
  166. delete tekucil;
  167. tekucil=n->left;
  168. }
  169. element *tekucid;
  170. tekucid=n->right;
  171. while(tekucid){
  172. while(tekucid->left!=NULL)tekucid=tekucid->left;
  173. delete tekucid;
  174. while(tekucid->right!=NULL)tekucid=tekucid->right;
  175. delete tekucid;
  176. tekucid=n->right;
  177. }
  178. delete n;
  179. }
  180.  
  181. elem InitT(int x, element *tree){
  182. element *tekucil;
  183. tekucil=tree->left;
  184. while(tekucil){
  185. while(tekucil->left!=NULL)tekucil=tekucil->left;
  186. delete tekucil;
  187. while(tekucil->right!=NULL)tekucil=tekucil->right;
  188. delete tekucil;
  189. tekucil=tree->left;
  190. }
  191. element *tekucid;
  192. tekucid=tree->right;
  193. while(tekucid){
  194. while(tekucid->left!=NULL)tekucid=tekucid->left;
  195. delete tekucid;
  196. while(tekucid->right!=NULL)tekucid=tekucid->right;
  197. delete tekucid;
  198. tekucid=tree->right;
  199. }
  200. delete tree;
  201. element *novi=new element;
  202. novi->left=NULL;
  203. novi->right=NULL;
  204. novi->label=x;
  205. cout << "Inicijalizacija gotova!!" << endl;
  206. }
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214. //Implementacija opcenitog stabla
  215.  
  216. struct elem{
  217. int label;
  218. int firstchild,nextsibling;
  219. };
  220. struct tr{
  221. elem elements[10000];
  222. int first;
  223. };
  224. int ParentT(int n, tr *tree){
  225. if(n>0)return (n-1);
  226. else {
  227. if(n==0)return -1;
  228. else cout << "Cvor " << n << " ne postoji u stablu." << endl;
  229. }
  230. }
  231.  
  232. int FirstChildT(int n,tr *tree){
  233. if(n<0) cout << "Cvor " << n << " ne postoji u stablu." << endl;
  234. else{
  235. if(n>=0 && ((n+1)!=0))return tree->elements[n].firstchild;
  236. else return -1;
  237. }
  238. }
  239.  
  240. int NextSiblingT(int n,tr *tree){
  241. if(n<0)cout <<"Cvor " << n << " ne postoji u stablu." << endl;
  242. else{
  243. if(n>=0 && (tree->elements[n].nextsibling!=-1))return tree->elements[n].nextsibling;
  244. else cout << "Cvor " << n << " je najdesnije dijete." << endl;
  245. }
  246. }
  247. int LabelT(int n,tr *tree){
  248. if(n<0)cout << "Cvor " << n << " ne postoji." << endl;
  249. else{
  250. if(tree->elements[n].label==-1) cout << "Cvor ne postoji!" << endl;
  251. else return tree->elements[n].label;
  252. }
  253. }
  254. int RootT(tr *tree){
  255. return tree->elements[0].label;
  256. }
  257. int CreateT(int x,int n,tr *tree){
  258. tree->elements[tree->first].label=n;
  259. tree->elements[tree->first].firstchild=x;
  260. tree->first++;
  261. }
  262. int ChangeLabelT(int x,int n,tr *tree){
  263. if(n<0)cout << "Cvor ne postoji!" << endl;
  264. else tree->elements[n].label=x;
  265. }
  266. int DeleteT(int n,tr *tree){
  267. if(n<0) cout << "Cvor ne postoji u stablu." << endl;
  268. else{
  269. if(tree->elements[n].firstchild>0)DeleteT(tree->elements[n].firstchild,tree);
  270. else{
  271. tree->elements[n].label=-1;
  272. tree->first--;}
  273. }
  274. }
  275. int InitT(int x,tr *tree){
  276. delete [] tree->elements;
  277. tree->first=0;
  278. tree->elements[tree->first].label=x;
  279. tree->first++;
  280. }
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289. //MAIN
  290.  
  291.  
  292. #include<iostream>
  293. using namespace std;
  294. #include "bstablo_polje.h"
  295.  
  296. int main(){
  297. tr *tree;
  298. tree=new tr;
  299. char dalje;
  300. cout << "----------------------------------" << endl;
  301. cout << " Dodavanje novog cvora u stablo " << endl;
  302. cout << "----------------------------------" << endl;
  303. do{
  304. cout << endl;
  305. cout << "Unesite vrijednost lijevog cvora: ";
  306. int lijevi_cvor;
  307. cin >>lijevi_cvor;
  308. cout << "Unesite indeks cvora: ";
  309. int indeks_cvora;
  310. cin >> indeks_cvora;
  311. CreateLeftT(lijevi_cvor,indeks_cvora,tree);
  312. cout << "Unesite vrijednost desnog cvora: ";
  313. int desni_cvor;
  314. cin >> desni_cvor;
  315. cout << "Unesite indeks cvora: ";
  316. int ind_c;
  317. cin >> ind_c;
  318. CreateRightT(desni_cvor,ind_c,tree);
  319. cout << "Zelite li jos dijece dodavati? (d/n): ";
  320. cin >> dalje;
  321. }while(dalje=='d');
  322. cout << endl;
  323. cout << "------------------------" << endl;
  324. cout << "Roditelj cvora" << endl;
  325. cout << "------------------------" << endl;
  326. cout << "Unesite indeks cvora: ";
  327. int indek;
  328. cin >> indek;
  329. ParentT(indek,tree);
  330. cout << "------------------------" << endl;
  331. cout << "Lijevo dijete" << endl;
  332. cout << "------------------------" << endl;
  333. cout << "Unesite indeks cvora: ";
  334. cin >> indek;
  335. LeftChildT(indek,tree);
  336. cout << "------------------------" << endl;
  337. cout << "Desno dijete" << endl;
  338. cout << "------------------------" << endl;
  339. cout << "Unesite indeks cvora: ";
  340. cin >> indek;
  341. RightChildT(indek,tree);
  342. cout << endl;
  343. cout << "------------------------" << endl;
  344. cout << "Vrijednost cvora" << endl;
  345. cout << "------------------------" << endl;
  346. cout << "Unesite indeks cvora: ";
  347. int incv;
  348. cin >> incv;
  349. LabelT(incv,tree);
  350. cout << "------------------------" << endl;
  351. cout << "Promjena vrijednosti" << endl;
  352. cout << "------------------------" << endl;
  353. cout << "Indeks cvora: ";
  354. cin >> incv;
  355. cout << "Nova vrijednost: ";
  356. int nova_vr;
  357. cin >> nova_vr;
  358. ChangeLabelT(nova_vr,incv,tree);
  359. cout << "------------------------" << endl;
  360. cout << "Korijen cvora" << endl;
  361. cout << RootT(tree) << endl;
  362. cout << "------------------------" << endl;
  363. cout << "Brisanje cvora" << endl;
  364. cout << "Indeks cvora: ";
  365. cin >> incv;
  366. DeleteT(incv,tree);
  367. cout << "------------------------" << endl;
  368. cout << "Inicijalizacija cvora" << endl;
  369. cout << "Nova vrijednost u prvom cvoru: ";
  370. int nvr_prvi;
  371. cin >> nvr_prvi;
  372. InitT(nvr_prvi,tree);
  373. system("pause");
  374. return 0;
  375. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.