Guest User

Untitled

a guest
Jul 20th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.01 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. // binarna stabla
  5. //#include "bstablo_pokazivac.h"
  6. #include "bstablo_polje.h"
  7.  
  8. // opcenito stablo
  9. #include "ostablo.h"
  10.  
  11. using namespace std;
  12.  
  13. pbsstablo BinarnoStablo;
  14. pstablo OpcenitoStablo;
  15.  
  16. void wait() {
  17. char znak[32];
  18. cout << "Unesite bilo koji znak za nastavak...";
  19. cin >> znak;
  20. }
  21.  
  22. // funkcije za binarno stablo:
  23.  
  24. void bsInit() {
  25. cout << "0.Inicijalizirati stablo binarnog stabla(InitB)" << endl;
  26. int x = 1;
  27. cout << "Unesite vrijednost korijena: ";
  28. cin >> x;
  29. BinarnoStablo = (pbsstablo)malloc(sizeof(pbstablo));
  30. InitB(x, BinarnoStablo);
  31. }
  32.  
  33. void bsParent() {
  34. cout << "1.Nadi roditelja binarnog stabla (ParentB)" << endl << endl;
  35. int x, d;
  36. cvor n = 0;
  37. while ((n == 0) && (x != -1)) {
  38. cout << "Unesite vrijednost cvora: ";
  39. cin >> x;
  40. n = FindLabelB(x, BinarnoStablo);
  41. if (n == 0)
  42. cout << "Cvor " << x << " ne postoji! Unesite postojeci cvor ili -1 za izlazak." << endl;
  43. } //while
  44. if (x == -1)
  45. return;
  46. cvor p = ParentB(n, BinarnoStablo);
  47. if (p != 0)
  48. cout << "Roditelj cvora " << x << " je " << LabelB(p, BinarnoStablo) << endl;
  49. else
  50. cout << "Roditelj nije naden! Cvor je korijen stabla." << endl << endl;
  51. wait();
  52. } //Parent
  53.  
  54. void bsLeftNode() {
  55. cout << "2.Nadji lijevo dijete binarnog stabla(LeftChildB)" << endl;
  56. int x;
  57. cvor n = 0;
  58. while ((n == 0) && (x != -1)) {
  59. cout << "Unesite vrijednost roditelja: ";
  60. cin >> x;
  61. n = FindLabelB(x, BinarnoStablo);
  62. if (n == 0) cout << "Cvor " << x << " ne postoji! Unesite postojeci cvor ili -1 za izlazak." << endl;
  63. } //while
  64. if (x == -1)
  65. return;
  66. cvor c = LeftChildB(n, BinarnoStablo);
  67. if (c != 0)
  68. cout << "Lijevo dijete: " << LabelB(c, BinarnoStablo) << endl;
  69. else
  70. cout << "Lijevo dijete: <PRAZNO>" << endl;
  71. wait();
  72. } //LeftNode
  73.  
  74. void bsRightNode() {
  75. cout << "3.Nadi desno dijete binarnog stabla (RightChildB)" << endl << endl;
  76. int x;
  77. cvor n = 0;
  78. while ((n == 0) && (x != -1)) {
  79. cout << "Unesite vrijednost roditelja: ";
  80. cin >> x;
  81. n = FindLabelB(x, BinarnoStablo);
  82. if (n == 0) cout << "Cvor " << x << " ne postoji! Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  83. } //while
  84. if (x == -1)
  85. return;
  86. cvor c = RightChildB(n, BinarnoStablo);
  87. if (c != 0)
  88. cout << "Desno dijete: " << LabelB(c, BinarnoStablo) << endl << endl;
  89. else
  90. cout << "Desno dijete: <PRAZNO>" << endl << endl;
  91. wait();
  92. } //RightNode
  93.  
  94. void bsCreateLeft() {
  95. cout << "4. Napraviti lijevo dijete binarnog stabla(CreateLeftB)" << endl << endl;
  96. int x, d;
  97. cvor n = 0;
  98. while ((n == 0) && (x != -1)) {
  99. cout << "Unesite vrijednost roditelja: ";
  100. cin >> x;
  101. n = FindLabelB(x, BinarnoStablo);
  102. if (n == 0) cout << "Cvor " << x << " ne postoji. Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  103. }
  104. if (x == -1)
  105. return;
  106. cout << "Unesite vrijednost lijevog djeteta: ";
  107. cin >> d;
  108. int r = CreateLeftB(d, n, BinarnoStablo);
  109. if (r == 0) {
  110. cout << "GRESKA: Lijevo dijete vec postoji!";
  111. wait();
  112. } //if
  113. } //CreateLeft
  114.  
  115. void bsCreateRight() {
  116. cout << "5. Napraviti desno dijete binarnog stabla(CreateRightB)" << endl << endl;
  117. int x, d;
  118. cvor n = 0;
  119. while ((n == 0) && (x != -1)) {
  120. cout << "Unesite vrijednost roditelja: ";
  121. cin >> x;
  122. n = FindLabelB(x, BinarnoStablo);
  123. if (n == 0) cout << "Cvor " << x << " ne postoji. Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  124. } //while
  125. if (x == -1)
  126. return;
  127. cout << "Unesite vrijednost desnog djeteta: ";
  128. cin >> d;
  129. int r = CreateRightB(d, n, BinarnoStablo);
  130. if (r == 0) {
  131. cout << "GRESKA: Desno dijete vec postoji!";
  132. wait();
  133. } //if
  134. } //CreateRight
  135.  
  136. void bsLabel() {
  137. cout << "6.Vrijednost cvora binarnog stabla (LabelB)" << endl << endl;
  138. int x, d;
  139. cvor n = 0;
  140. while ((n == 0) && (x != -1)) {
  141. cout << "Unesite trazeni cvor: ";
  142. cin >> x;
  143. n = FindLabelB(x, BinarnoStablo);
  144. if (n == 0)
  145. cout << "Cvor " << x << " ne postoji! Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  146. } //while
  147. if (x == -1)
  148. return;
  149. cout << "Vrijednost cvora: " << LabelB(n, BinarnoStablo) << endl << endl;
  150. wait();
  151. } //Label
  152.  
  153. void bsChangeLabel() {
  154. cout << "7.Promijeni vrijednost cvora binarnog stabla (ChangeLabelB)" << endl << endl;
  155. int x, d;
  156. cvor n = 0;
  157. while ((n == 0) && (x != -1)) {
  158. cout << "Unesite staru vrijednost cvora: ";
  159. cin >> x;
  160. n = FindLabelB(x, BinarnoStablo);
  161. if (n == 0)
  162. cout << "Cvor " << x << " ne postoji! Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  163. } //ChangeLabel
  164. if (x == -1)
  165. return;
  166. cout << "Unesite novu vrijednost cvora: ";
  167. cin >> d;
  168. ChangeLabelB(d, n, BinarnoStablo);
  169. } //ChangeLabel
  170.  
  171. void bsRoot() {
  172. cout << "8.Nadi korijen binarnog stabla (RootB)" << endl << endl;
  173. cvor t = RootB(BinarnoStablo);
  174. cout << "Korijen: " << LabelB(t, BinarnoStablo) << endl << endl;
  175. wait();
  176. } //Root
  177.  
  178. void bsDelete() {
  179. cout << "9.Obrisati cvor binarnog stabla (DeleteB)" << endl << endl;
  180. int x, d;
  181. cvor n = 0;
  182. while ((n == 0) && (x != -1)) {
  183. cout << "Unesite vrijednost cvora: ";
  184. cin >> x;
  185. n = FindLabelB(x, BinarnoStablo);
  186. if (n == 0)
  187. cout << "Cvor " << x << " ne postoji. Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  188. } //while
  189. if (x == -1)
  190. return;
  191. DeleteB(n, BinarnoStablo);
  192. } //Delete
  193.  
  194. //funkcije - OPCENITO STABLO:
  195.  
  196. void osInit() {
  197. cout << "10. Inicijalizirati opcenito stablo (InitT)" << endl << endl;
  198. int x = 1;
  199. cout << "Unesite vrijednost korijena: ";
  200. cin >> x;
  201. OpcenitoStablo = (pstablo)malloc(sizeof(stablo));
  202. InitT(x, OpcenitoStablo);
  203. } //Init
  204.  
  205. void osParent() {
  206. cout << "11. Naci roditelja opcenitog stabla (ParentT)" << endl << endl;
  207. int x, d;
  208. cvor n = 0;
  209. while ((n == 0) && (x != -1)) {
  210. cout << "Unesite vrijednost cvora: ";
  211. cin >> x;
  212. n = FindLabelT(x, OpcenitoStablo);
  213. if (n == 0) cout << "Cvor " << x << " ne postoji. Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  214. } //while
  215. if (x == -1)
  216. return;
  217. cvor p = ParentT(n, OpcenitoStablo);
  218. if (p != 0)
  219. cout << "Roditelj cvora " << x << " je " << LabelT(p, OpcenitoStablo) << endl << endl;
  220. else
  221. cout << "Roditelj nije naden! Cvor je korijen stabla." << endl << endl;
  222. wait();
  223. } //Parent
  224.  
  225. void osFirstChild() {
  226. cout << "12. Nadi prvo dijete opcenitog stabla(FirstChildT)" << endl << endl;
  227. int x;
  228. cvor n = 0;
  229. while ((n == 0) && (x != -1)) {
  230. cout << "Unesite vrijednost roditelja: ";
  231. cin >> x;
  232. n = FindLabelT(x, OpcenitoStablo);
  233. if (n == 0)
  234. cout << "Cvor " << x << " ne postoji. Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  235. } //while
  236. if (x == -1)
  237. return;
  238. cvor c = FirstChildT(n, OpcenitoStablo);
  239. if (c != 0)
  240. cout << "Prvo dijete: " << LabelT(c, OpcenitoStablo) << endl << endl;
  241. else
  242. cout << "Prvo dijete: <PRAZNO>" << endl << endl;
  243. wait();
  244. } //FirstChild
  245.  
  246. void osNextSibling() {
  247. cout << "13. Nadi sljedeceg brata opcenitog stabla (NextSiblingT)" << endl << endl;
  248. int x;
  249. cvor n = 0;
  250. while ((n == 0) && (x != -1)) {
  251. cout << "Unesite vrijednost cvora: ";
  252. cin >> x;
  253. n = FindLabelT(x, OpcenitoStablo);
  254. if (n == 0)
  255. cout << "Cvor " << x << " ne postoji. Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  256. } //while
  257. if (x == -1)
  258. return;
  259. cvor c = NextSiblingT(n, OpcenitoStablo);
  260. if (c != 0)
  261. cout << "Sljedeci brat: " << LabelT(c, OpcenitoStablo) << endl << endl;
  262. else
  263. cout << "Sljedeci brat: <PRAZNO>" << endl << endl;
  264. wait();
  265. } //NextSibling
  266.  
  267. void osCreateChild() {
  268. cout << "14. Napraviti dijete opcenitog stabla (CreateT)" << endl << endl;
  269. int x, d;
  270. cvor n = 0;
  271. while ((n == 0) && (x != -1)) {
  272. cout << "Unesite vrijednost roditelja: ";
  273. cin >> x;
  274. n = FindLabelT(x, OpcenitoStablo);
  275. if (n == 0)
  276. cout << "Cvor " << x << " ne postoji! Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  277. } //while
  278. if (x == -1)
  279. return;
  280. cout << "Unesite vrijednost djeteta: ";
  281. cin >> d;
  282. CreateT(d, n, OpcenitoStablo);
  283. } //CreateChild
  284.  
  285. void osLabel() {
  286. cout << "15. Vrijednost cvora opcenitog stabla (LabelT)" << endl << endl;
  287. int x, d;
  288. cvor n = 0;
  289. while ((n == 0) && (x != -1)) {
  290. cout << "Unesite trazeni cvor: ";
  291. cin >> x;
  292. n = FindLabelT(x, OpcenitoStablo);
  293. if (n == 0)
  294. cout << "Cvor " << x << " ne postoji. Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  295. } //while
  296. if (x == -1)
  297. return;
  298. cout << "Vrijednost cvora: " << LabelT(n, OpcenitoStablo) << endl << endl;
  299. wait();
  300. } //Label
  301.  
  302. void osChangeLabel() {
  303. cout << "16. Promijeni vrijednost cvora opcenitog stabla (ChangeLabelT)" << endl << endl;
  304. int x, d;
  305. cvor n = 0;
  306. while ((n == 0) && (x != -1)) {
  307. cout << "Unesite staru vrijednost cvora: ";
  308. cin >> x;
  309. n = FindLabelT(x, OpcenitoStablo);
  310. if (n == 0)
  311. cout << "Cvor " << x << " ne postoji. Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  312. } //ChangeLabel
  313. if (x == -1)
  314. return;
  315. cout << "Unesite novu vrijednost cvora: ";
  316. cin >> d;
  317. ChangeLabelT(d, n, OpcenitoStablo);
  318. } //ChangeLabel
  319.  
  320. void osRoot() {
  321. cout << "17. Nadi korijen opcenitog stabla (RootT)" << endl << endl;
  322. cvor t = RootT(OpcenitoStablo);
  323. cout << "Korijen: " << LabelT(t, OpcenitoStablo) << endl << endl;
  324. wait();
  325. } //Root
  326.  
  327. void osDelete() {
  328. cout << "18. Obrisati cvor opcenitog stabla(DeleteT)" << endl << endl;
  329. int x, d;
  330. cvor n = 0;
  331. while ((n == 0) && (x != -1)) {
  332. cout << "Unesite vrijednost cvora: ";
  333. cin >> x;
  334. n = FindLabelT(x, OpcenitoStablo);
  335. if (n == 0)
  336. cout << "Cvor " << x << " ne postoji. Unesite postojeci cvor ili -1 za izlazak." << endl << endl;
  337. } //while
  338. if (x == -1)
  339. return;
  340. DeleteT(n, OpcenitoStablo);
  341. } //Delete
  342.  
  343. int main(int argc, char *argv[]) {
  344. int izbor = 20;
  345. do {
  346. cout << "BINARNO STABLO: " << endl << endl;
  347. cout << "0. Inicijalizirati stablo (InitB)" << endl;
  348. cout << "1. Nadi roditelja (ParentB)" << endl;
  349. cout << "2. Nadi lijevo dijete (LeftChildB)" << endl;
  350. cout << "3. Nadi desno dijete (RightChildB)" << endl;
  351. cout << "4. Napraviti lijevo dijete (CreateLeftB)" << endl;
  352. cout << "5. Napraviti desno dijete (CreateRightB)" << endl;
  353. cout << "6. Vrijednost cvora (LabelB)" << endl;
  354. cout << "7. Promijeniti vrijednost cvora (ChangeLabelB)" << endl;
  355. cout << "8. Nadi korijen (RootB)" << endl;
  356. cout << "9. Obrisati cvor (DeleteB)" << endl << endl;
  357. cout << "OPCENITO STABLO" << endl << endl;
  358. cout << "10. Inicijalizirati stablo (InitT)" << endl;
  359. cout << "11. Nadi roditelja (ParentT)" << endl;
  360. cout << "12. Nadi prvo dijete (FirstChildT)" << endl;
  361. cout << "13. Nadi sljedeceg brata (NextSiblingT)" << endl;
  362. cout << "14. Napraviti dijete (CreateT)" << endl;
  363. cout << "15. Vrijednost cvora (LabelT)" << endl;
  364. cout << "16. Promijeniti vrijednost cvora (ChangeLabelT)" << endl;
  365. cout << "17. Nadi korijen (RootT)" << endl;
  366. cout << "18. Obrisati cvor (DeleteT)" << endl << endl;
  367. cout << "20. Izlaz" << endl;
  368. cout << "Vas izbor je: ";
  369. cin >> izbor;
  370. switch (izbor){
  371. case 0:
  372. bsInit();
  373. break;
  374. case 1:
  375. bsParent();
  376. break;
  377. case 2:
  378. bsLeftNode();
  379. break;
  380. case 3:
  381. bsRightNode();
  382. break;
  383. case 4:
  384. bsCreateLeft();
  385. break;
  386. case 5:
  387. bsCreateRight();
  388. break;
  389. case 6:
  390. bsLabel();
  391. break;
  392. case 7:
  393. bsChangeLabel();
  394. break;
  395. case 8:
  396. bsRoot();
  397. break;
  398. case 9:
  399. bsDelete();
  400. break;
  401. case 10:
  402. osInit();
  403. break;
  404. case 11:
  405. osParent();
  406. break;
  407. case 12:
  408. osFirstChild();
  409. break;
  410. case 13:
  411. osNextSibling();
  412. break;
  413. case 14:
  414. osCreateChild();
  415. break;
  416. case 15:
  417. osLabel();
  418. break;
  419. case 16:
  420. osChangeLabel();
  421. break;
  422. case 17:
  423. osRoot();
  424. break;
  425. case 18:
  426. osDelete();
  427. break;
  428. } //switch
  429. } while (izbor != 20);
  430. system("pause");
  431. return 0;
  432. }
Add Comment
Please, Sign In to add comment