Posted By

mateocindric on 01/19/15


Tagged

binarno stablo stabla ophoenje hrpa


Versions (?)

main.cpp


 / Published in: C++
 

main.cpp

  1. #include <iostream>
  2. #include "prvo_dijete-sljedeci_brat.h"
  3. #include "ophodenje_stabla.h"
  4. #include "bstablo_polje.h"
  5. #include "bstablo_pokazivac.h"
  6. #include "bstablo_pretrazivanja.h"
  7. #include "sortiranje_hrpe.h"
  8. using namespace std;
  9.  
  10. int main(){
  11. int izbor, izbor2, izbor3, izbor4, oznaka, cvor;
  12. bool init=false, init2=false, init3=false;
  13. int broj;
  14. do{
  15. cout<<"I Z B O R N I K"<<endl;
  16. cout<<"============================================="<<endl;
  17. cout<<"1-Opcenito stablo"<<endl;
  18. cout<<"2-Ophodenje stabla"<<endl;
  19. cout<<"3-Binarno stablo-polje"<<endl;
  20. cout<<"4-Binarno stablo-pokazivaci"<<endl;
  21. cout<<"5-Binarno stablo pretrazivanja"<<endl;
  22. cout<<"6-Sortiranje pomocu hrpe"<<endl;
  23. cout<<"9-Izlaz"<<endl;
  24. cout<<"Vas izbor: ";
  25. cin>>izbor;
  26. switch(izbor){
  27. case 1:
  28. do{
  29. cout<<"============================================="<<endl;
  30. cout<<"Opcenito stablo: prvo dijete - sljedeci brat"<<endl;
  31. cout<<"1-Inicijalizacija"<<endl;
  32. cout<<"2-Ispis korijena"<<endl;
  33. cout<<"3-Novi cvor"<<endl;
  34. cout<<"4-Brisanje cvora"<<endl;
  35. cout<<"5-Ispis oznake cvora"<<endl;
  36. cout<<"6-Promjena oznake cvora"<<endl;
  37. cout<<"7-Ispis roditelja cvora"<<endl;
  38. cout<<"8-Prvo dijete cvora"<<endl;
  39. cout<<"9-Sljedeci brat cvora"<<endl;
  40. cout<<"10-izlaz"<<endl;
  41. cout<<"Vas izbor: ";
  42. cin>>izbor2;
  43. if(izbor2<1 || izbor2>10)
  44. cout<<"Pogresan unos!"<<endl;
  45. if(izbor2!=1 && init==false) {
  46. cout<<"Stablo nije inicijalizirano!"<<endl;
  47. break;
  48. }
  49.  
  50. switch(izbor2){
  51. case 1:
  52. cout<<"Unesite oznaku korijena stabla: ";
  53. cin>>oznaka;
  54. InitT(oznaka,stablo);
  55. init=true;
  56. break;
  57. case 2:
  58. cout<<"Korijen stabla je cvor: "<<RootT(stablo)<<endl;
  59. cout<<"Oznaka korijena stabla je:"<<LabelT(1,stablo)<<endl;
  60. break;
  61. case 3:
  62. cout<<"Unesite cvor roditelja: ";
  63. cin>>cvor;
  64. if(LabelT(cvor,stablo)==-1){
  65. cout<<"Taj cvor ne postoji!"<<endl;
  66. break;
  67. }
  68. cout<<"Unesite oznaku cvora kojeg zelite kreirati: ";
  69. cin>>oznaka;
  70. cout<<"Cvor je kreiran na indeksu: "<<CreateT(oznaka,cvor, stablo)<<endl;
  71. break;
  72. case 4:
  73. cout<<"Unesite cvor koji zelite obrisati: ";
  74. cin>>cvor;
  75. if(LabelT(cvor,stablo)==-1){
  76. cout<<"Taj cvor ne postoji!"<<endl;
  77. break;
  78. }
  79. DeleteT(cvor, stablo);
  80. if(cvor==1){
  81. init=false;
  82. cout<<"Korijen je uspjesno obrisan!"<<endl;
  83. }
  84. else cout<<"Cvor na indeksu "<<cvor<<" je uspjesno obrisan!"<<endl;
  85. break;
  86. case 5: cout<<"Unesite cvor ciju oznaku zelite saznati: ";
  87. cin>>cvor;
  88. if(LabelT(cvor,stablo)==-1){
  89. cout<<"Taj cvor ne postoji!"<<endl;
  90. break;
  91. }
  92. cout<<"Oznaka cvora je: "<<LabelT(cvor,stablo);
  93. break;
  94. case 6: cout<<"Unesite cvor kojem zelite promijeniti oznaku: ";
  95. cin>>cvor;
  96. if(LabelT(cvor,stablo)==-1){
  97. cout<<"Taj cvor ne postoji!"<<endl;
  98. break;
  99. }
  100. cout<<"Trenutna oznaka cvora je: "<<LabelT(cvor,stablo);
  101. cout<<"Nova oznaka: ";
  102. cin>>oznaka;
  103. ChangeLabelT(oznaka,cvor,stablo);
  104. break;
  105. case 7:
  106. cout<<"Unesite cvor kojem zelite naci roditelja: ";
  107. cin>>cvor;
  108. if(LabelT(cvor,stablo)==-1){
  109. cout<<"Taj cvor ne postoji!"<<endl;
  110. break;
  111. }
  112. if(ParentT(cvor,stablo)==-1)
  113. cout<<"Taj cvor nema roditelja! To je korijen stabla."<<endl;
  114. else cout<<"Roditelj tog cvora je cvor: "<<ParentT(cvor,stablo)<<endl;
  115. break;
  116. case 8: cout<<"Unesite cvor kojem zelite pronaci prvo dijete: ";
  117. cin>>cvor;
  118. if(LabelT(cvor,stablo)==-1){
  119. cout<<"Taj cvor ne postoji!"<<endl;
  120. break;
  121. }
  122. if(FirstChildT(cvor,stablo)==-1)
  123. cout<<"Taj cvor nema potomke!"<<endl;
  124. else
  125. cout<<"Prvo dijete cvora "<<cvor<<" je: "<<FirstChildT(cvor,stablo)<<endl;
  126. break;
  127. case 9:
  128. cout<<"Unesite cvor kojem zelite naci sljedeceg brata: ";
  129. cin>>cvor;
  130. if(LabelT(cvor,stablo)==-1){
  131. cout<<"Taj cvor ne postoji!"<<endl;
  132. break;
  133. }
  134. if(NextSiblingT(cvor,stablo)==-1)
  135. cout<<"Taj cvor nema sljedeceg brata!"<<endl;
  136. else cout<<"Sljedeci brat cvora "<<cvor<<" je: "<<NextSiblingT(cvor,stablo)<<endl;
  137. break;
  138. }
  139. }while(izbor2!=10);
  140. break;
  141.  
  142. case 2:
  143. if(init==false){
  144. cout<<"Stablo nije inicijalizirano!"<<endl;
  145. break;
  146. }
  147. do{
  148. cout <<"============================================="<<endl;
  149. cout <<"Ophodenje stabla"<<endl;
  150. cout << "1.Preorder" << endl;
  151. cout << "2.Inorder" << endl;
  152. cout << "3.Postorder" << endl;
  153. cout << "9.Izlaz" << endl;
  154. cout << "Vas izbor: ";
  155. cin >> izbor4;
  156. switch(izbor4){
  157. case 1: preorder(RootT(stablo));
  158. cout << endl;
  159. break;
  160. case 2: inorder(RootT(stablo));
  161. cout << endl;
  162. break;
  163. case 3: postorder(RootT(stablo));
  164. cout << endl;
  165. break;
  166. }
  167. }while(izbor4!=9);
  168. break;
  169.  
  170. case 3:
  171. do{
  172. cout<<"============================================="<<endl;
  173. cout<<"Binarno stablo - polje"<<endl;
  174. cout<<"1-Inicijalizacija binarnog stabla"<<endl;
  175. cout<<"2-Ispis korijena binarnog stabla"<<endl;
  176. cout<<"3-Stvaranje lijevog djeteta cvora"<<endl;
  177. cout<<"4-Stvaranje desnog djeteta cvora"<<endl;
  178. cout<<"5-Brisanje cvora"<<endl;
  179. cout<<"6-Ispis oznake cvora"<<endl;
  180. cout<<"7-Promjena oznake cvora"<<endl;
  181. cout<<"8-Ispis roditelja cvora"<<endl;
  182. cout<<"9-Lijevo dijete cvora"<<endl;
  183. cout<<"10-Desno dijete cvora"<<endl;
  184. cout<<"11-Izlaz"<<endl;
  185. cout<<"Vas izbor: ";
  186. cin>>izbor2;
  187. if(izbor2!=1 && init2==false){
  188. cout<<"Binarno stablo nije inicijalizirano!"<<endl;
  189. break;
  190. }
  191. switch(izbor2){
  192. case 1:
  193. cout<<"Unesite oznaku korijena stabla: ";
  194. cin>>oznaka;
  195. InitB(oznaka,bstablo);
  196. init2=true;
  197. break;
  198. case 2:
  199. cout<<"Korijen stabla je cvor: "<<RootB(bstablo)<<endl;
  200. cout<<"Oznaka korijena stabla je: "<<LabelB(1,bstablo)<<endl;
  201. break;
  202. case 3:
  203. cout<<"Unesite cvor kojem zelite stvoriti lijevo dijete: ";
  204. cin>>cvor;
  205. if(LabelB(cvor,bstablo)==-1){
  206. cout<<"Taj cvor ne postoji!"<<endl;
  207. break;
  208. }
  209. cout<<"Unesite oznaku cvora kojeg zelite stvoriti: ";
  210. cin>>oznaka;
  211. if(CreateLeftB(oznaka,cvor,bstablo)==true)
  212. cout<<"Cvor je kreiran na indeksu: "<<cvor*2<<endl;
  213. else
  214. cout<<"Taj cvor vec ima lijevo dijete!"<<endl;
  215. break;
  216. case 4:
  217. cout<<"Unesite cvor kojem zelite stvoriti desno dijete: ";
  218. cin>>cvor;
  219. if(LabelB(cvor,bstablo)==-1){
  220. cout<<"Taj cvor ne postoji!"<<endl;
  221. break;
  222. }
  223. cout<<"Unesite oznaku cvora kojeg zelite stvoriti: ";
  224. cin>>oznaka;
  225. if(CreateRightB(oznaka,cvor,bstablo)==true)
  226. cout<<"Cvor je kreiran na indeksu: "<<cvor*2+1<<endl;
  227. else
  228. cout<<"Taj cvor vec ima desno dijete!"<<endl;
  229. break;
  230.  
  231. case 5:
  232. cout<<"Unesite cvor koji zelite obrisati: ";
  233. cin>>cvor;
  234. if(LabelB(cvor,bstablo)==-1){
  235. cout<<"Taj cvor ne postoji!"<<endl;
  236. break;
  237. }
  238. DeleteB(cvor, bstablo);
  239. if(cvor==1) {
  240. init2=false;
  241. cout<<"Korijen je uspjesno obrisan!"<<endl;
  242. }
  243. else
  244. cout<<"Cvor na indeksu "<<cvor<<" je uspjesno obrisan!"<<endl;
  245. break;
  246. case 6:
  247. cout<<"Unesite cvor ciju oznaku zelite saznati: ";
  248. cin>>cvor;
  249. if(LabelB(cvor,bstablo)==-1){
  250. cout<<"Taj cvor ne postoji!"<<endl;
  251. break;
  252. }
  253. cout<<"Oznaka cvora je: "<<LabelB(cvor,bstablo);
  254. break;
  255. case 7:
  256. cout<<"Unesite cvor kojem zelite promijeniti oznaku: ";
  257. cin>>cvor;
  258. if(LabelB(cvor,bstablo)==-1){
  259. cout<<"Taj cvor ne postoji!"<<endl;
  260. break;
  261. }
  262. cout<<"Trenutna oznaka cvora je: "<<LabelB(cvor,bstablo);
  263. cout<<"Nova oznaka: ";
  264. cin>>oznaka;
  265. ChangeLabelB(oznaka,cvor,bstablo);
  266. break;
  267. case 8:
  268. cout<<"Unesite cvor kojem zelite naci roditelja: ";
  269. cin>>cvor;
  270. if(LabelB(cvor,bstablo)==-1){
  271. cout<<"Taj cvor ne postoji!"<<endl;
  272. break;
  273. };
  274. if(ParentB(cvor,bstablo)==-1)
  275. cout<<"Taj cvor nema roditelja! To je korijen stabla."<<endl;
  276. else
  277. cout<<"Roditelj tog cvora je cvor: "<<ParentB(cvor,bstablo)<<endl;
  278. break;
  279. case 9:
  280. cout<<"Unesite cvor kojem zelite naci lijevo dijete: ";
  281. cin>>cvor;
  282. if(LabelB(cvor,bstablo)==-1){
  283. cout<<"Taj cvor ne postoji!"<<endl;
  284. break;
  285. }
  286. if(LeftChildB(cvor,bstablo)==-1)
  287. cout<<"Taj cvor nema lijevo dijete!";
  288. else
  289. cout<<"Lijevo dijete tog cvora je cvor: "<<LeftChildB(cvor,bstablo)<<endl;
  290. break;
  291. case 10:
  292. cout<<"Unesite cvor kojem zelite naci desno dijete: ";
  293. cin>>cvor;
  294. if(LabelB(cvor,bstablo)==-1){
  295. cout<<"Taj cvor ne postoji!"<<endl;
  296. break;
  297. }
  298. if(RightChildB(cvor,bstablo)==-1)
  299. cout<<"Taj cvor nema desno dijete!"<<endl;
  300. else
  301. cout<<"Desno dijete tog cvora je cvor: "<<RightChildB(cvor,bstablo)<<endl;
  302. break;
  303. }
  304. }while(izbor2!=11);
  305. break;
  306.  
  307. case 4:
  308. do{
  309. cout<<"============================================="<<endl;
  310. cout<<"Binarno stablo - pokazivaci"<<endl;
  311. cout<<"1-Inicijalizacija binarnog stabla"<<endl;
  312. cout<<"2-Ispis korijena binarnog stabla"<<endl;
  313. cout<<"3-Stvaranje lijevog djeteta cvora"<<endl;
  314. cout<<"4-Stvaranje desnog djeteta cvora"<<endl;
  315. cout<<"5-Brisanje cvora"<<endl;
  316. cout<<"6-Promjena oznake cvora"<<endl;
  317. cout<<"7-Ispis roditelja cvora"<<endl;
  318. cout<<"8-Lijevo dijete cvora"<<endl;
  319. cout<<"9-Desno dijete cvora"<<endl;
  320. cout<<"10-izlaz"<<endl;
  321. cout<<"Vas izbor: ";
  322. cin>>izbor2;
  323. if(izbor2!=1 && init3==false){
  324. cout<<"Binarno stablo nije inicijalizirano!"<<endl;
  325. break;
  326. }
  327. switch(izbor2){
  328. case 1:
  329. cout<<"Unesite oznaku korijena stabla: ";
  330. cin>>oznaka;
  331. Initb(oznaka,b_stablo);
  332. init3=true;
  333. break;
  334. case 2:
  335. cout<<"Oznaka korijena stabla je: "<<Labelb(b_stablo)<<endl;
  336. break;
  337. case 3:
  338. cout<<"Unesite oznaku cvora kojem zelite stvoriti lijevo dijete: ";
  339. cin>>cvor;
  340. if(ALabel(b_stablo,cvor)==NULL) {
  341. cout<<"Taj cvor ne postoji!"<<endl;
  342. break;
  343. }
  344. cout<<"Unesite oznaku cvora kojeg zelite stvoriti: ";
  345. cin>>oznaka;
  346. if(CreateLeftb(oznaka,ALabel(b_stablo,cvor))==true)
  347. cout<<"Cvor s oznakom "<<oznaka<<" je kreiran!"<<endl;
  348. else
  349. cout<<"Taj cvor vec ima lijevo dijete!"<<endl;
  350. break;
  351. case 4:
  352. cout<<"Unesite oznaku cvora kojem zelite stvoriti desno dijete: ";
  353. cin>>cvor;
  354. if(ALabel(b_stablo,cvor)==NULL) {
  355. cout<<"Taj cvor ne postoji!"<<endl;
  356. break;
  357. }
  358. cout<<"Unesite oznaku cvora kojeg zelite stvoriti: ";
  359. cin>>oznaka;
  360. if(CreateRightb(oznaka,ALabel(b_stablo,cvor))==true)
  361. cout<<"Cvor s oznakom "<<oznaka<<" je kreiran!"<<endl;
  362. else
  363. cout<<"Taj cvor vec ima desno dijete!"<<endl;
  364. break;
  365.  
  366. case 5:
  367. cout<<"Unesite oznaku cvora koji zelite obrisati: ";
  368. cin>>cvor;
  369. if(ALabel(b_stablo,cvor)==NULL) {
  370. cout<<"Taj cvor ne postoji!"<<endl;
  371. break;
  372. }
  373. if(ALabel(b_stablo,cvor)==Rootb(b_stablo)) {
  374. init3=false;
  375. cout<<"Korijen je uspjesno obrisan!"<<endl;
  376. }
  377. else
  378. cout<<"Cvor je uspjesno obrisan"<<endl;
  379. Deleteb(ALabel(b_stablo,cvor), b_stablo);
  380. break;
  381. case 6:
  382. cout<<"Unesite oznaku cvora kojem zelite promijeniti oznaku: ";
  383. cin>>cvor;
  384. if(ALabel(b_stablo,cvor)==NULL) {
  385. cout<<"Taj cvor ne postoji!"<<endl;
  386. break;
  387. }
  388. cout<<"Nova oznaka: ";
  389. cin>>oznaka;
  390. ChangeLabelb(oznaka,ALabel(b_stablo,cvor));
  391. break;
  392. case 7:
  393. cout<<"Unesite oznaku cvora kojem zelite naci roditelja: ";
  394. cin>>cvor;
  395. if(ALabel(b_stablo,cvor)==NULL) {
  396. cout<<"Taj cvor ne postoji!"<<endl;
  397. break;
  398. }
  399. pomoc=Parentb(ALabel(b_stablo,cvor), b_stablo);
  400. if(pomoc==NULL)
  401. cout<<"Taj cvor nema roditelja! To je korijen stabla."<<endl;
  402. else
  403. cout<<"Roditelj tog cvora je cvor s oznakom: "<<Labelb(pomoc)<<endl;
  404. break;
  405. case 8:
  406. cout<<"Unesite oznaku cvora kojem zelite naci lijevo dijete: ";
  407. cin>>cvor;
  408. if(ALabel(b_stablo,cvor)==NULL) {
  409. cout<<"Taj cvor ne postoji!"<<endl;
  410. break;
  411. }
  412. pomoc=LeftChildb(ALabel(b_stablo, cvor));
  413. if(pomoc==NULL)
  414. cout<<"Taj cvor nema lijevo dijete!"<<endl;
  415. else
  416. cout<<"Lijevo dijete tog cvora je cvor s oznakom: "<<Labelb(pomoc)<<endl;
  417. break;
  418. case 9:
  419. cout<<"Unesite oznaku cvora kojem zelite naci desno dijete: ";
  420. cin>>cvor;
  421. if(ALabel(b_stablo,cvor)==NULL) {
  422. cout<<"Taj cvor ne postoji!"<<endl;
  423. break;
  424. }
  425. pomoc=RightChildb(ALabel(b_stablo, cvor));
  426. if(pomoc==NULL)
  427. cout<<"Taj cvor nema desno dijete!"<<endl;
  428. else
  429. cout<<"Desno dijete tog cvora je cvor s oznakom: "<<Labelb(pomoc)<<endl;
  430. break;
  431. }
  432. }while(izbor2!=10);
  433. break;
  434. case 5:
  435. {
  436. telement *binstablo=new telement;
  437. binstablo->lijevo=NULL;
  438. binstablo->desno=NULL;
  439. do{
  440. cout<<"============================================="<<endl;
  441. cout<<"Binarno stablo pretrazivanja"<<endl;
  442. cout<<"1.Alokacija stabla"<<endl;
  443. cout<<"2.Dodaj element u stablo"<<endl;
  444. cout<<"3.Sortiraj uzlazno"<<endl;
  445. cout<<"4.Sortiraj silazno"<<endl;
  446. cout<<"5.Pronadi element"<<endl;
  447. cout<<"6.Dealokacija"<<endl;
  448. cout<<"9.Izlaz"<<endl;
  449. cout<<"Vas izbor: ";
  450. cin>>izbor3;
  451. switch(izbor3){
  452. case 1:
  453. cout<<"Binarno stablo pretrazivanja je alocirano!"<<endl;
  454. break;
  455. case 2:
  456. {
  457. dodaj_element_u_stablo(binstablo);
  458. break;
  459. }
  460. case 3:
  461. cout<<"Uzlazno sortiranje: "<<endl;
  462. sort_uzlazno(binstablo);
  463. break;
  464. case 4:
  465. cout<<"Silazno sortiranje: "<<endl;
  466. sort_silazno(binstablo);
  467. break;
  468. case 5:
  469. int cvor;
  470. cout<<"Unesite cvor kojeg zelite pronaci: ";
  471. cin>>cvor;
  472. {
  473. telement*trazi(binstablo);
  474. }
  475. break;
  476. case 6:
  477. cout<<"Dealocirano!"<<endl;
  478. dealokacija(binstablo);
  479. break;}
  480. }while(izbor3!=9);
  481. }
  482. break;
  483. case 6:
  484. cout<<"Sortiranje pomocu hrpe"<<endl;
  485. int unos, i , nadredjeni, pomocni;
  486. do{
  487. cout<<"Unesi element (0 za izlaz): ";
  488. cin>>unos;
  489. hrpa[pok_hrpe++]=unos;
  490. i=pok_hrpe-1;
  491. nadredjeni=(i-1)/2;
  492. while(hrpa[nadredjeni]>hrpa[i]){
  493. pomocni=hrpa[nadredjeni];
  494. hrpa[nadredjeni]=hrpa[i];
  495. hrpa[i]=pomocni;
  496. i=nadredjeni;
  497. nadredjeni=(i-1)/2;
  498. }
  499. }while(unos!=0);
  500. sortiranje();
  501. cout<<endl;
  502. break;
  503. }
  504. }while(izbor!=9);
  505. system("pause");
  506. return 0;
  507. }

Report this snippet  

You need to login to post a comment.