Posted By

hcosic2 on 01/18/15


Tagged

tree binary implementation stablo


Versions (?)

glavni program


 / Published in: C++
 

Glavni program 4. zadatak iz struktura podataka

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include "opcenito_stablo.h"
  4. #include "binstablo_polje.h"
  5. #include "binstablo_pokazivac.h"
  6. using namespace std;
  7.  
  8. void opcenito ()
  9. {
  10. int izbor, oznaka, cvor;
  11. cout << "*** Inicjalizacija opcenitog stabla ***" << endl;
  12. do
  13. {
  14. cout << "Unesite oznaku korijena stabla: ";
  15. cin >> oznaka;
  16. if (oznaka >= 0)
  17. break;
  18. cout << "Pogresan unos!" << endl;
  19. } while (1);
  20. InitT (oznaka, T);
  21. do
  22. {
  23. cout << "--- Opcenito stablo ---" << endl;
  24. cout << "0) Ispis korijena stabla." << endl;
  25. cout << "1) Dodavanje novog cvora." << endl;
  26. cout << "2) Brisanje cvora." << endl;
  27. cout << "3) Ispis oznake cvora." << endl;
  28. cout << "4) Promjena oznake cvora." << endl;
  29. cout << "5) Ispis roditelja cvora." << endl;
  30. cout << "6) Prvo dijete cvora." << endl;
  31. cout << "7) Sljedeci brat cvora." << endl;
  32. cout << "8) Ophodjenje stabla." << endl;
  33. cout << "9) Povratak." << endl;
  34. cin >> izbor;
  35. switch (izbor)
  36. {
  37. case 0:
  38. cout << "---------------------" << endl;
  39. cout << "\tKorijen stabla je cvor: " << RootT (T) << endl;
  40. cout << "\tOznaka korijena stabla: " << LabelT (1, T) << endl;;
  41. break;
  42. case 1:
  43. cout << "---------------------" << endl;
  44. cout << "Pozicija cvora: ";
  45. cin >> cvor;
  46. if (LabelT (cvor, T) == -1)
  47. {
  48. cout << "Cvor ne postoji." << endl;
  49. break;
  50. }
  51. cout << "Unesit oznaku novog cvora: ";
  52. cin >> oznaka;
  53. cout << "Cvor je stvoren u polju na poziciji: " << CreateT (oznaka, cvor, T) << endl;
  54. break;
  55. case 2:
  56. cout << "---------------------" << endl;
  57. cout << "Unesite poziciju cvora kojeda zelite obrisati: ";
  58. cin >> cvor;
  59. if (LabelT (cvor, T) == -1)
  60. {
  61. cout << "Cvor ne postoji." << endl;
  62. break;
  63. }
  64. DeleteT (cvor, T);
  65. cout << "Cvor je obrisan." << endl;
  66. break;
  67. case 3:
  68. cout << "-------------------" << endl;
  69. cout << "Unesite adresu cvora kojem zelite ispisati oznaku: ";
  70. cin >> cvor;
  71. if (LabelT (cvor, T) == -1)
  72. {
  73. cout << "Cvor ne postoji." << endl;
  74. break;
  75. }
  76. cout << "Oznaka: " << LabelT (cvor, T) << endl;
  77. break;
  78. case 4:
  79. cout << "------------------" << endl;
  80. cout << "Unesite adresu cvora u polju kojemu zelite promijeniti oznaku: ";
  81. cin >> cvor;
  82. if (LabelT (cvor, T) == -1)
  83. {
  84. cout << "Cvor ne postoji." << endl;
  85. break;
  86. }
  87. cout << "Oznaka cvora: " << LabelT (cvor, T) << endl;
  88. cout << "Nova oznaka cvora: ";
  89. cin >> oznaka;
  90. ChangeLabelT (oznaka, cvor, T);
  91. break;
  92. case 5:
  93. cout << "------------------" << endl;
  94. cout << "Unesite adresu cvora: ";
  95. cin >> cvor;
  96. if (LabelT (cvor, T) == -1)
  97. {
  98. cout << "Cvor ne postoji." << endl;
  99. break;
  100. }
  101. if (ParentT (cvor, T) == -1)
  102. cout << "Cvor nema roditelja (korijen stabla)" << endl;
  103. else
  104. cout << "Roditelj cvora: " << ParentT (cvor, T) << endl;
  105. break;
  106. case 6:
  107. cout << "------------------------------------" << endl;
  108. cout << "Unesite cvor: ";
  109. cin >> cvor;
  110. if (LabelT(cvor, T)==-1)
  111. {
  112. cout << "Cvor ne postoji!" << endl;
  113. break;
  114. }
  115. cvor = FirstChildT(cvor, T);
  116. if (cvor == -1)
  117. cout << "Taj cvor nema potomaka." << endl;
  118. else
  119. cout << "Prvo dijete tog cvora je cvor: " << cvor << endl;
  120. break;
  121. case 7:
  122. cout << "------------------------------------" << endl;
  123. cout << "Unesite cvor: ";
  124. cin >> cvor;
  125. if (LabelT (cvor, T) == -1) {
  126. cout << "Cvor ne postoji" << endl;
  127. break;
  128. }
  129. cvor = NextSiblingT(cvor, T);
  130. if (cvor == -1)
  131. cout << "Taj cvor nema brace." << endl;
  132. else
  133. cout << "Sljedeci brat je cvor: " << cvor << endl;
  134. break;
  135. case 8:
  136. cout << "Preorder: " << endl;
  137. PreOrderT (RootT (T));
  138. cout << "InOrder: " << endl;
  139. InOrderT (RootT (T));
  140. cout << "Postorder: " << endl;
  141. PostOrderT (RootT (T));
  142. cout << endl;
  143. break;
  144. }
  145. } while (izbor != 9);
  146. };
  147. void bin_polje ()
  148. {
  149. int izbor, oznaka, cvor;
  150. cout << "*** Inicjalizacija binarnog stabla ***" << endl;
  151. do
  152. {
  153. cout << "Unesite oznaku korijena stabla: ";
  154. cin >> oznaka;
  155. if (oznaka >= 0)
  156. break;
  157. cout << "Pogresan unos!" << endl;
  158. } while (1);
  159. InitB (oznaka, binT);
  160. do
  161. {
  162. cout << "--- Opcenito stablo ---" << endl;
  163. cout << "0) Ispis korijena stabla." << endl;
  164. cout << "1) Dodavanje lijevog cvora." << endl;
  165. cout << "2) Dodavanje desnog cvora." << endl;
  166. cout << "3) Brisanje cvora." << endl;
  167. cout << "4) Ispis oznake cvora." << endl;
  168. cout << "5) Promjena oznake cvora." << endl;
  169. cout << "6) Ispis roditelja cvora." << endl;
  170. cout << "7) Lijevo dijete cvora." << endl;
  171. cout << "8) Desno dijete stabla." << endl;
  172. cout << "9) Povratak." << endl;
  173. cin >> izbor;
  174. switch (izbor)
  175. {
  176. case 0:
  177. cout << "---------------------" << endl;
  178. cout << "\tKorijen stabla je cvor: " << RootB (binT) << endl;
  179. cout << "\tOznaka korijena stabla: " << LabelB (1, binT) << endl;;
  180. break;
  181. case 1:
  182. cout << "---------------------" << endl;
  183. cout << "Pozicija cvora: ";
  184. cin >> cvor;
  185. if (LabelB (cvor, binT) == -1)
  186. {
  187. cout << "Cvor ne postoji." << endl;
  188. break;
  189. }
  190. cout << "Unesit oznaku novog cvora: ";
  191. cin >> oznaka;
  192. if (CreateLeftB (oznaka, cvor, binT))
  193. cout << "Cvor je stvoren." << endl;
  194. else
  195. cout << "Cvor vec ima lijevo dijete." << endl;
  196. break;
  197. case 2:
  198. cout << "---------------------" << endl;
  199. cout << "Pozicija cvora: ";
  200. cin >> cvor;
  201. if (LabelB (cvor, binT) == -1)
  202. {
  203. cout << "Cvor ne postoji." << endl;
  204. break;
  205. }
  206. cout << "Unesit oznaku novog cvora: ";
  207. cin >> oznaka;
  208. if (CreateRightB (oznaka, cvor, binT))
  209. cout << "Cvor je stvoren." << endl;
  210. else
  211. cout << "Cvor vec ima desno dijete." << endl;
  212. break;
  213. case 3:
  214. cout << "---------------------" << endl;
  215. cout << "Unesite poziciju cvora kojeda zelite obrisati: ";
  216. cin >> cvor;
  217. if (LabelB (cvor, binT) == -1)
  218. {
  219. cout << "Cvor ne postoji." << endl;
  220. break;
  221. }
  222. DeleteB (cvor, binT);
  223. cout << "Cvor je obrisan." << endl;
  224. break;
  225. case 4:
  226. cout << "-------------------" << endl;
  227. cout << "Unesite adresu cvora kojem zelite ispisati oznaku: ";
  228. cin >> cvor;
  229. if (LabelB (cvor, binT) == -1)
  230. {
  231. cout << "Cvor ne postoji." << endl;
  232. break;
  233. }
  234. cout << "Oznaka: " << LabelB (cvor, binT) << endl;
  235. break;
  236. case 5:
  237. cout << "------------------" << endl;
  238. cout << "Unesite adresu cvora u polju kojemu zelite promijeniti oznaku: ";
  239. cin >> cvor;
  240. if (LabelB (cvor, binT) == -1)
  241. {
  242. cout << "Cvor ne postoji." << endl;
  243. break;
  244. }
  245. cout << "Oznaka cvora: " << LabelB (cvor, binT) << endl;
  246. cout << "Nova oznaka cvora: ";
  247. cin >> oznaka;
  248. ChangeLabelB (oznaka, cvor, binT);
  249. break;
  250. case 6:
  251. cout << "------------------" << endl;
  252. cout << "Unesite adresu cvora: ";
  253. cin >> cvor;
  254. if (LabelB (cvor, binT) == -1)
  255. {
  256. cout << "Cvor ne postoji." << endl;
  257. break;
  258. }
  259. if (ParentB (cvor, binT) == -1)
  260. cout << "Cvor nema roditelja (korijen stabla)" << endl;
  261. else
  262. cout << "Roditelj cvora: " << ParentB (cvor, binT) << endl;
  263. break;
  264. case 7:
  265. cout << "------------------------------------" << endl;
  266. cout << "Unesite cvor: ";
  267. cin >> cvor;
  268. if (LabelT(cvor, T)==-1)
  269. {
  270. cout << "Cvor ne postoji!" << endl;
  271. break;
  272. }
  273. if (LeftChildB(cvor, binT) == -1)
  274. cout << "Taj cvor nema potomaka." << endl;
  275. else
  276. cout << "Prvo dijete tog cvora je cvor: " << LeftChildB(cvor, binT) << endl;
  277. break;
  278. case 8:
  279. cout << "------------------------------------" << endl;
  280. cout << "Unesite cvor: ";
  281. cin >> cvor;
  282. if (LabelB (cvor, binT) == -1) {
  283. cout << "Cvor ne postoji" << endl;
  284. break;
  285. }
  286. if (RightChildB (cvor, binT) == -1)
  287. cout << "Taj cvor nema brace." << endl;
  288. else
  289. cout << "Sljedeci brat je cvor: " << RightChildB (cvor, binT) << endl;
  290. break;
  291. }
  292. } while (izbor != 9);
  293. };
  294.  
  295. void bin_pok ()
  296. {
  297. int izbor, oznaka, cvor;
  298. cout << "*** Inicjalizacija binarnog stabla ***" << endl;
  299. do
  300. {
  301. cout << "Unesite oznaku korijena stabla: ";
  302. cin >> oznaka;
  303. if (oznaka >= 0)
  304. break;
  305. cout << "Pogresan unos!" << endl;
  306. } while (1);
  307. Init (oznaka, Tbin);
  308. do
  309. {
  310. cout << "--- Opcenito stablo ---" << endl;
  311. cout << "0) Ispis korijena stabla." << endl;
  312. cout << "1) Dodavanje lijevog cvora." << endl;
  313. cout << "2) Dodavanje desnog cvora." << endl;
  314. cout << "3) Brisanje cvora." << endl;
  315. cout << "4) Ispis oznake cvora." << endl;
  316. cout << "5) Promjena oznake cvora." << endl;
  317. cout << "6) Ispis roditelja cvora." << endl;
  318. cout << "7) Lijevo dijete cvora." << endl;
  319. cout << "8) Desno dijete stabla." << endl;
  320. cout << "9) Povratak." << endl;
  321. cin >> izbor;
  322. switch (izbor)
  323. {
  324. case 0:
  325. cout << "---------------------" << endl;
  326. cout << "\tKorijen stabla je cvor: " << Root (Tbin) << endl;
  327. cout << "\tOznaka korijena stabla: " << Label (Root (Tbin)) << endl;;
  328. break;
  329. case 1:
  330. cout << "---------------------" << endl;
  331. cout << "Oznaka cvora: ";
  332. cin >> cvor;
  333. if (pretrazivanje (Tbin, cvor) == NULL)
  334. {
  335. cout << "Cvor ne postoji." << endl;
  336. break;
  337. }
  338. cout << "Unesit oznaku novog cvora: ";
  339. cin >> oznaka;
  340. if (CreateLeft (oznaka, pretrazivanje (Tbin, cvor)))
  341. cout << "Cvor je stvoren." << endl;
  342. else
  343. cout << "Cvor vec ima lijevo dijete." << endl;
  344. break;
  345. case 2:
  346. cout << "---------------------" << endl;
  347. cout << "Oznaka cvora: ";
  348. cin >> cvor;
  349. if (pretrazivanje (Tbin, cvor) == NULL)
  350. {
  351. cout << "Cvor ne postoji." << endl;
  352. break;
  353. }
  354. cout << "Unesit oznaku novog cvora: ";
  355. cin >> oznaka;
  356. if (CreateRight (oznaka, pretrazivanje (Tbin, cvor)))
  357. cout << "Cvor je stvoren." << endl;
  358. else
  359. cout << "Cvor vec ima desno dijete." << endl;
  360. break;
  361. case 3:
  362. cout << "---------------------" << endl;
  363. cout << "Unesite poziciju cvora kojeda zelite obrisati: ";
  364. cin >> cvor;
  365. if (pretrazivanje (Tbin, cvor) == NULL)
  366. {
  367. cout << "Cvor ne postoji." << endl;
  368. break;
  369. }
  370. Delete (pretrazivanje (Tbin, cvor), Tbin);
  371. cout << "Cvor je obrisan." << endl;
  372. break;
  373. case 4:
  374. cout << "-------------------" << endl;
  375. cout << "Unesite adresu cvora kojem zelite ispisati oznaku: ";
  376. cin >> cvor;
  377. if (pretrazivanje (Tbin, cvor) == NULL)
  378. {
  379. cout << "Cvor ne postoji." << endl;
  380. break;
  381. }
  382. cout << "Oznaka: " << Label (pretrazivanje (Tbin, cvor)) << endl;
  383. break;
  384. case 5:
  385. cout << "------------------" << endl;
  386. cout << "Unesite adresu cvora u polju kojemu zelite promijeniti oznaku: ";
  387. cin >> cvor;
  388. if (pretrazivanje (Tbin, cvor) == NULL)
  389. {
  390. cout << "Cvor ne postoji." << endl;
  391. break;
  392. }
  393. cout << "Nova oznaka cvora: ";
  394. cin >> oznaka;
  395. ChangeLabel (oznaka, pretrazivanje (Tbin, cvor));
  396. break;
  397. case 6:
  398. cout << "------------------" << endl;
  399. cout << "Unesite adresu cvora: ";
  400. cin >> cvor;
  401. if (pretrazivanje (Tbin, cvor) == NULL)
  402. {
  403. cout << "Cvor ne postoji." << endl;
  404. break;
  405. }
  406. if (Parent (pretrazivanje (Tbin, cvor), Tbin) == NULL)
  407. cout << "Cvor nema roditelja (korijen stabla)" << endl;
  408. else
  409. cout << "Roditelj cvora: " << Label (Parent (pretrazivanje (Tbin, cvor), Tbin)) << endl;
  410. break;
  411. case 7:
  412. cout << "------------------------------------" << endl;
  413. cout << "Unesite cvor: ";
  414. cin >> cvor;
  415. if (pretrazivanje (Tbin, cvor) == NULL)
  416. {
  417. cout << "Cvor ne postoji!" << endl;
  418. break;
  419. }
  420. if (LeftChild (pretrazivanje (Tbin, cvor)) == NULL)
  421. cout << "Taj cvor nema potomaka." << endl;
  422. else
  423. cout << "Lijevo dijete tog cvora je cvor: " << Label (LeftChild (pretrazivanje (Tbin, cvor))) << endl;
  424. break;
  425. case 8:
  426. cout << "------------------------------------" << endl;
  427. cout << "Unesite cvor: ";
  428. cin >> cvor;
  429. if (pretrazivanje (Tbin, cvor) == NULL) {
  430. cout << "Cvor ne postoji" << endl;
  431. break;
  432. }
  433. if (RightChild (pretrazivanje (Tbin, cvor)) == NULL)
  434. cout << "Taj cvor nema desno dijete." << endl;
  435. else
  436. cout << "Desno dijete je cvor: " << Label (RightChild (pretrazivanje (Tbin, cvor))) << endl;
  437. break;
  438. }
  439. } while (izbor != 9);
  440. };
  441.  
  442. int main ()
  443. {
  444. int izbor;
  445. do
  446. {
  447. system ("cls");
  448. cout << "--- Glavni Izbornik ---" << endl;
  449. cout << "1) Opcenito stablo." << endl;
  450. cout << "2) Binarno stablo, implementacija pomocu polja." << endl;
  451. cout << "3) Binarno stablo, implementacija pomocu pokazivaca." << endl;
  452. cout << "9) Izlaz iz programa." << endl;
  453. cin >> izbor;
  454. switch (izbor)
  455. {
  456. case 1:
  457. opcenito ();
  458. break;
  459. case 2:
  460. bin_polje ();
  461. break;
  462. case 3:
  463. bin_pok ();
  464. break;
  465. }
  466. } while (izbor != 9);
  467. }

Report this snippet  

You need to login to post a comment.