Posted By

vangogh94 on 01/21/15


Tagged

Strukture polje binarno stablo pretraivanja podatak


Versions (?)

IzvršniKôd


 / Published in: C++
 

Izvorni kôd za testiranje 3 headera i testiranje ostalih vrsta stabala

  1. #include <iostream>
  2. #include "stablo_polje.h"
  3. #include "binStablo_polje.h"
  4. //#include "binStablo_pokazivaci.h"
  5. using namespace std;
  6.  
  7.  
  8. void IspisT(short indeks, stabloStrukt *stablo){
  9. if(stablo->cvor[indeks].prviSin!=-1){//spuštamo se na najnižu razinu počevši od zadanog čvora (indeksa)
  10. cout<<"Idem dolje"<<endl;IspisT(stablo->cvor[indeks].prviSin, stablo); }
  11. if(stablo->cvor[indeks].sl!=-1){//kada smo na hijerarhiji onda idemo do najdesnijeg buraza
  12. cout<<"Idem desno"<<endl;IspisT(stablo->cvor[indeks].sl, stablo); }
  13. if(stablo->cvor[indeks].data!=-1){cout<<indeks<<". "<<stablo->cvor[indeks].data;
  14. if(stablo->cvor[indeks].sl!=-1) cout<<" (lijevi sl cvoru "<<stablo->cvor[stablo->cvor[indeks].sl].data<<")";
  15. if(stablo->cvor[indeks].prviSin!=-1) cout<<" (roditelj cvoru "<<stablo->cvor[stablo->cvor[indeks].prviSin].data<<")";
  16. cout<<endl;
  17. }
  18. }
  19.  
  20.  
  21. void IspisiB(cvor trazi, bStabloStrukt *binStablo){
  22. if(LeftChildB(trazi, binStablo)!=0)
  23. IspisiB(LeftChildB(trazi, binStablo), binStablo);
  24. if(RightChildB(trazi, binStablo)!=0)
  25. IspisiB(RightChildB(trazi, binStablo), binStablo);
  26. int oznaka;
  27. oznaka=LabelB(trazi, binStablo);
  28. cout<<oznaka<<endl;
  29. }
  30.  
  31. bool naden=false;
  32. void TraziB(int unos, cvor trazi, bStabloStrukt *binStablo){
  33. static bStabloStrukt *glava=binStablo;
  34. if(LeftChildB(trazi, binStablo)!=0)
  35. TraziB(unos, LeftChildB(trazi, binStablo), binStablo);
  36. if(RightChildB(trazi, binStablo)!=0)
  37. TraziB(unos, RightChildB(trazi, binStablo), binStablo);
  38. int oznaka;
  39. oznaka=LabelB(trazi, binStablo);
  40. if(oznaka==unos)
  41. naden=true;
  42. }
  43.  
  44.  
  45. int OBICNO (){
  46. stabloStrukt *stablo;
  47. bool promjena;
  48. cout<<"Unesi oznaku korijena stabla: ";
  49. int oznaka, indeks; cin>>oznaka;
  50. InitT(oznaka, stablo);
  51. //stablo->cvor[0].ispis();
  52. short izbor;
  53. do {
  54. cout<<"OBICNO STABLO IZBORNIK"<<endl;
  55. cout<<"1 Upis novog lista \n2 Promijeni labelu \n3 Ispisi \n4 Ophodenje stabla \n5 Obrisi podstablo \n Izbor: ";
  56. cin>>izbor;
  57. switch (izbor){
  58. case 1:
  59. cout<<" ISPIS STABLA "<<endl<<endl;
  60. IspisT(stablo->korijen, stablo);
  61. cout<<"\n\nUnesi indeks roditelja: ";
  62. do
  63. cin>>indeks;
  64. while (stablo->cvor[indeks].data==-1&&cout<<"Pogresan indeks, unesi ponovno: ");
  65. cout<<"Unesi labelu za list: ";
  66. cin>>oznaka;
  67. CreateT(oznaka, indeks, stablo);
  68. break;
  69. case 2:
  70. cout<<" ISPIS STABLA "<<endl<<endl;
  71. IspisT(stablo->korijen, stablo);
  72. cout<<"\n\nUnesi indeks cvora za promjenu: ";
  73. do
  74. cin>>indeks;
  75. while (stablo->cvor[indeks].data==-1&&cout<<"Pogresan indeks, unesi ponovno: ");
  76. cout<<"Unesi novu labelu: ";
  77. cin>>oznaka;
  78. promjena=ChangeLabelT(oznaka, indeks, stablo);
  79. if(promjena)cout<<"Labela je uspjesno promjenjena!"<<endl;
  80. else cout<<"Labela nije promijenjena!"<<endl;
  81. case 3:
  82. cout<<" ISPIS STABLA "<<endl<<endl;
  83. IspisT(stablo->korijen, stablo);
  84. cout<<endl<<endl;
  85. break;
  86. case 4:
  87. cout<<"\n 1 PreOrder\n 2 InOrder\n 3 PostOrder\n Izbor: ";
  88. do
  89. cin>>izbor;
  90. while((izbor>3||izbor<0)&&cout<<"\n 1 PreOrder\n 3 InOrder\n 3 PostOrder\n Izbor: ");
  91. if(izbor == 1) PreorderT(stablo->korijen, stablo);
  92. else if(izbor == 2) InorderT(stablo->korijen, stablo);
  93. else if(izbor == 3) PostorderT(stablo->korijen, stablo);
  94. break;
  95. case 5:
  96. if(kursor==1&&cout<<"Samo je korijen u stablu, nema se sto brisati!"<<endl) break;
  97. cout<<" ISPIS STABLA "<<endl<<endl;
  98. IspisT(stablo->korijen, stablo);
  99. cout<<endl<<endl;
  100. cout<<"Unesi indeks cvora za brisanje njegovog podstabla: ";
  101. do
  102. cin>>indeks;
  103. while (stablo->cvor[indeks].data==-1||indeks==0&&cout<<"Pogresan indeks, unesi ponovno: ");
  104. DeleteT(indeks, stablo);
  105. cout<<"bla "<<stablo->cvor[0].prviSin<<endl;
  106. for(int i=0; i<10000; i++){
  107. if(stablo->cvor[i].sl==indeks)
  108. stablo->cvor[i].sl=-1;
  109. if(stablo->cvor[i].prviSin==indeks)
  110. stablo->cvor[i].prviSin=-1;
  111.  
  112. }
  113. }
  114. cout<<endl;
  115. system("pause");
  116. system("cls");
  117. } while(izbor!=0);
  118. system("Pause");
  119. return 0;
  120.  
  121. }
  122.  
  123.  
  124. void dodaj_element_u_stablo(bStabloStrukt *stablo, int unos){
  125. cvor zadnji=RootB(stablo);
  126. int dalje=1;
  127. do{
  128. if (unos>LabelB(zadnji, stablo)){
  129. if (RightChildB(zadnji, stablo)==0) {zadnji=RightChildB(zadnji, stablo);} //prijelaz na desni podčvor
  130. else{ // dodavanje desnog podčvora
  131. CreateRightB(unos, zadnji, stablo);
  132. dalje=0;
  133. }//if
  134. }//if
  135. else{//unos<=zadnji->unos
  136. if (LeftChildB(zadnji, stablo)==0){zadnji=LeftChildB(zadnji, stablo);} //prijelaz na lijevi podčvor
  137. else{ // dodavanje lijevog podčvora
  138. CreateLeftB(unos, zadnji, stablo);
  139. dalje=0;
  140. }//if
  141. }
  142. }while (dalje==1);
  143. };
  144.  
  145. void SORTIRANO(){
  146. cout<<" BINARNO STABLO PRETRAZIVANJA"<<endl;
  147. bStabloStrukt *stablo;
  148. int n,x;
  149. cout<<"Unesi korijen stabla: ";
  150. cin>>x;
  151. InitB(x, stablo);
  152. cout<<"Stablo je kreirano sa korjenom "<<x<<endl;
  153. cout<<"Koliko elemenata zelite unjeti u stablo: ";
  154. cin>>n;
  155.  
  156. for(int i=0; i<n; i++){
  157. cout<<"Unesi"<<i+1<<". element: ";
  158. cin>>x;
  159. dodaj_element_u_stablo(stablo, x);
  160. }
  161. cout<<"ISPIS BINARNOG STABLA PRETRAZIVANA"<<endl<<endl;
  162. IspisiB(RootB(stablo),stablo);
  163. cout<<"\nUnesite cvor za pretragu: ";
  164. cin>>x;
  165. TraziB(x, RootB(stablo), stablo);
  166. if(naden){
  167. cout<<"unos je pronadjen!"<<endl;
  168. }
  169. naden=false;
  170. }
  171.  
  172.  
  173. int BINARNO (){
  174. bStabloStrukt *stablo;
  175. cvor pomCvor;
  176. short izbor;
  177. int oznaka;
  178. char jos, grananje, unosLD;
  179. cout<<"Unesite oznaku za inicijalizaciju: ";
  180. cin>>oznaka;
  181. InitB(oznaka, stablo);
  182. cout<<"Stablo je inicijalizirano sa korijenom "<<oznaka<<endl;
  183. do{
  184. cout<<"BINARNO STABLO IZBORNIK"<<endl;
  185. cout<<"1 Unos elemenata (kretanje po stablu)\n2 Ispis korijena\n3 Ispisi\n4 Pretrazi stablo\n5 Brisi podstablo\n Izbor: ";
  186. cin>>izbor;
  187. switch (izbor){
  188. case 1:
  189. do{
  190. pomCvor=RootB(stablo);
  191. do{
  192. oznaka=LabelB(pomCvor, stablo);
  193. cout<<"Sada se nalazite na "<<oznaka<<endl;
  194. cout<<"Za setanje na desno unesite 'd' za lijevo 'l' te za unos 'u': ";
  195. cin>>grananje;
  196. if(grananje=='d'&&RightChildB(pomCvor, stablo)!=0&&cout<<"Setamo se desno"<<endl)
  197. pomCvor=RightChildB(pomCvor, stablo);
  198. else if(grananje=='l'&&LeftChildB(pomCvor, stablo)!=0&&cout<<"Setamo se lijevo"<<endl)
  199. pomCvor=LeftChildB(pomCvor, stablo);
  200. else if(grananje=='u'){
  201. cout<<"Unesite oznaku: ";
  202. cin>>oznaka;
  203. cout<<"Za UPIS na desno unesite 'd' za lijevo 'l': ";
  204. cin>>unosLD;
  205. if(unosLD=='d' && RightChildB(pomCvor, stablo)==0&&cout<<"Element je dodan desno")
  206. CreateRightB(oznaka, pomCvor, stablo);
  207. else if(unosLD=='l'&&LeftChildB(pomCvor,stablo)==0&&cout<<"Element je dodan lijevo")
  208. CreateLeftB(oznaka, pomCvor, stablo);
  209. else cout<<"Na trazenom mjestu cvor vec postoji"<<endl;
  210. }
  211. else cout<<"Ne moze dalje, dosli ste do lista (ili pogresan unos)"<<endl;
  212. cout<<endl;
  213. system("pause");
  214. system("cls");
  215. } while (grananje!='u');
  216. cout<<"Jos elemenata (d/n): ";
  217. cin>>jos;
  218. system("cls");
  219. } while (jos=='d');
  220. break;
  221. case 2:
  222. oznaka=LabelB(RootB(stablo), stablo);
  223. cout<<oznaka;
  224. break;
  225. case 3:
  226. IspisiB(RootB(stablo), stablo);
  227. cout<<endl;
  228. break;
  229. case 4:
  230. cout<<"Unesi oznaku za pretragu: ";
  231. cin>>oznaka;
  232. TraziB(oznaka, RootB(stablo), stablo);
  233. if(naden) cout<<"Element je pronaden u stablu!"<<endl;
  234. else cout<<"Element nije pronaden u stablu!"<<endl;
  235. naden=false;
  236. break;
  237. case 5:
  238. cout<<"Brisanje lijevog 'l' ili desnog 'd' podstabla: ";
  239. cin>>unosLD;
  240. if(unosLD=='l')
  241. DeleteB(LeftChildB(RootB(stablo), stablo), stablo);
  242. else if(unosLD=='d')
  243. DeleteB(RightChildB(RootB(stablo), stablo), stablo);
  244. else if(unosLD!='l'&&unosLD!='d')
  245. cout<<"Pogresan unos, podstablo nije obrisano"<<endl;
  246. if(unosLD=='l'||unosLD=='d')
  247. cout<<"Podstablo je izbrisano, ispisite za prikaz!"<<endl;
  248.  
  249. }
  250. cout<<endl;
  251. system("pause");
  252. system("cls");
  253. } while(izbor);
  254. }
  255.  
  256.  
  257. int main (){
  258. short izbor;
  259. do{
  260. cout<<"1 Binarno stablo \n2 BinSt Pretrazivanja \n3 Obicno stablo (+ophodenja) \n Izbor: ";
  261. cin>>izbor;
  262. system("cls");
  263. switch (izbor){
  264. case 1:
  265. BINARNO();
  266. case 2:
  267. SORTIRANO();
  268. case 3:
  269. OBICNO();
  270. }
  271. } while (izbor!=0) ;
  272. }

Report this snippet  

You need to login to post a comment.