Posted By

8ivana8 on 01/19/15


Tagged

program Strukture podataka glavni implementacija binarno stablno


Versions (?)

glavni_program


 / Published in: C++
 

Glavni program za 4. zadatak iz kolegija Strukture podataka.

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <windows.h>
  4. using namespace std;
  5.  
  6. #include "prvo_dijete_sljedeci_brat.h"
  7. #include "binarno_stablo_pokazivac.h"
  8. #include "binarno_stablo_polje.h"
  9. #include "ophodnja_stabla.h"
  10. #include "hrpa_sort.h"
  11. #include "binarno_pretrazivanje.h"
  12.  
  13. void opcenito_stablo(){
  14. short korijen, dijete, opcija;
  15. int cvor=0, provjera=0, choiceBr, chDel, brDel;
  16. char dn, dnL, newLabel;
  17. cout << "\nKreiranje stabla" << endl;
  18. cout << "----------------" << endl;
  19. cout << "Unesite korijen stabla: ";
  20. cin >> korijen;
  21.  
  22. tree* T = InitT(korijen, T);
  23. cout << "Korijen kreiranog stabla je: " << RootT(T) << endl << endl;
  24. do{
  25. if(!provjera)
  26. cvor = korijen;
  27. else{
  28. cout << "Kojem broju zelite unesti potomke? ";
  29. cin >> cvor;
  30. }
  31. for(int i=0; i<3; i++){
  32. cout << "Unesite " << i+1 << ". potomka broju " << cvor << ": ";
  33. cin >> dijete;
  34. if(provjera > 0)
  35. CreateT(dijete, cvor, T);
  36. else if(!provjera)
  37. CreateT(dijete, korijen, T);
  38. }
  39. cout << "Zelite li unositi jos elemenata? (d/n): ";
  40. cin >> dn;
  41. if(dn == 'd')
  42. provjera++;
  43. cout << endl;
  44. }while(dn == 'd');
  45. cout << "------------" << endl;
  46.  
  47. cout << "Prvo dijete korijena " << RootT(T) << " je: " << FirstChildT(korijen, T) << endl;
  48. cout << "Braca prethodnog cvora su (max. 2): ";
  49. if(NextSiblingT(FirstChildT(korijen, T), T) == -1) cout << "Ne postoji brat unesenom cvoru." << endl;
  50. else {
  51. cout << NextSiblingT(FirstChildT(korijen, T), T);
  52. cout << ", " << NextSiblingT(NextSiblingT(FirstChildT(korijen, T), T), T) << "." << endl;
  53. }
  54. if(provjera) {
  55. cout << "\nPrvi potomak broja " << cvor << " je: " << FirstChildT(cvor, T) << endl;
  56. cout << "Braca prethodnog cvora su (max. 2): ";
  57. cout << NextSiblingT(FirstChildT(cvor, T), T);
  58. cout << ", " << NextSiblingT(NextSiblingT(FirstChildT(cvor, T), T), T) << "." << endl;
  59. }
  60.  
  61. do{
  62. cout << "\nOdabir operacija nad stablom" << endl;
  63. cout << "===========" << endl
  64. << "Sto zelite uraditi sa stablom? " << endl
  65. << "1. Ispisati oznaku odredenog cvora." << endl
  66. << "2. Izvrsiti ophodnju stabla." << endl
  67. << "3. Izbrisati cijelo ili cvor stabla." << endl
  68. << "0. Izlazak u glavni izbornik." << endl
  69. << "===========" << endl
  70. << "Koji je Vas odabir: " << endl;
  71. cin >> opcija;
  72.  
  73. if(opcija == 1){
  74. cout << "Kojem broju zelite ispisati oznaku? " << endl;
  75. cin >> choiceBr;
  76. cout << "Trenutna oznaka cvora " << choiceBr << " je: " << LabelT(choiceBr, T) << endl;
  77. cout << "Zelite li promijeniti oznaku pretrazenog cvora? (d/n): ";
  78. cin >> dnL;
  79. if(dnL == 'd'){
  80. cout << "Unesite novu oznaku: ";
  81. cin >> newLabel;
  82. ChangeLabelT(newLabel, choiceBr, T);
  83. cout << "Oznaka cvora " << choiceBr << " sada je: " << LabelT(choiceBr, T) << endl << endl;
  84. }
  85. }
  86. if(opcija == 2){
  87. int ch_oph;
  88. cout << "Odaberite vrstu ophodnje stabla [1] - PreOrder, [2] - InOrder, [3] - PostOrder: ";
  89. cin >> ch_oph;
  90. if(ch_oph == 1) cout << "\nPreorder: " << endl;
  91. if(ch_oph == 2) cout << "\nInOrder: " << endl;
  92. if(ch_oph == 3) cout << "\nPostOrder: " << endl;
  93. switch(ch_oph){
  94. case 1: PreOrder(T); break;
  95. case 2: InOrder(T); break;
  96. case 3: PostOrder(T); break;
  97. default: cout << "Unesena opcija nije podrzana!" << endl;
  98. }
  99. cout << endl;
  100. }
  101. if(opcija == 3){
  102. cout << "Zelite li izbrisati cijeli stablo ili samo odredeni cvor stabla? \n[0] - cijelo stablo, [1] - odredeni cvor: ";
  103. cin >> chDel;
  104. if(!chDel){
  105. DeleteT(korijen, T);
  106. cout << "Kompletno stablo je izbrisano." << endl;
  107. }
  108. else{
  109. cout << "Unesite broj koji zelite izbrisati iz stabla: ";
  110. cin >> brDel;
  111. if(DeleteT(brDel, T)) cout << "Broj: " << brDel << " je uspjesno izbrisan iz stabla" << endl;
  112. else cout << "Doslo je do pogreske pri brisanju broja: " << brDel << ". Pokusajte ponovno." << endl;
  113. }
  114. cout << "----------------" << endl;
  115. }
  116. }while(opcija);
  117. cout << "\nZa povratak u Glavni izbornik pritisnite: Enter";
  118. }
  119.  
  120. void binarno_pokazivac(){
  121. cout << "\nKreiranje binarnog stabla pokazivacima." << endl;
  122. cout << "----------------" << endl;
  123.  
  124. cout << "Brojevi od kojih ce se kreirati stablo:" << endl;
  125. cout << "1, 8, 13, 11, 17" << endl;
  126. cout << "-----" << endl;
  127. cout << "Kreiram korijen 1 ..." << endl;
  128. pok_element* T = InitB(1, T);
  129. cout << "Kreiram lijevo dijete korijenu 1 -> 8 ..." << endl;
  130. CreateLeftB(8, RootB(T));
  131. cout << "Kreiram desno dijete korijenu 1 -> 13 ... " << endl;
  132. CreateRightB(13, RootB(T));
  133. cout << "Kreiram lijevo dijete cvoru 3 -> 2 ..." << endl;
  134. CreateLeftB(2, LeftChildB(T));
  135. cout << "Kreiram desno dijete cvoru 3 -> 11 ..." << endl;
  136. CreateRightB(11, LeftChildB(T));
  137. cout << "Kreiram desno dijete cvoru 13 -> 17 ..." << endl;
  138. CreateRightB(17, RightChildB(T));
  139. cout << "Kreiram lijevo dijete cvoru 13 -> 14 ..." << endl;
  140. CreateLeftB(14, RightChildB(T));
  141.  
  142. cout << "Oznaka cvora je: " << LabelB(T);
  143. cout << endl;
  144. cout << "Promjena oznake sa: " << LabelB(T) << " na 11" << endl;
  145. ChangeLabelB(11, RootB(T));
  146. cout << "Nova oznaka cvora je: " << LabelB(T) << endl;
  147.  
  148. cout << "Roditelj cvora 13 je: ";
  149. cout << LabelB(ParentB(13, T)) << endl;
  150. cout << "Roditelj cvora 14 je: ";
  151. cout << LabelB(ParentB(14, T)) << endl;
  152.  
  153. cout << "Brisanje stabla ...";
  154. DeleteB(RootB(T), RootB(T));
  155. T = NULL;
  156.  
  157. cout << "Stablo je uspjesno obrisano." << endl;
  158. cout << "\nZa povratak u Glavni izbornik pritisnite: Enter";
  159. cin.ignore(); cin.get();
  160. }
  161.  
  162. void binarno_polje(){
  163. cout << "\nKreiranje binarnog stabla poljem." << endl;
  164. cout << "----------------" << endl;
  165.  
  166. cout << "Brojevi od kojih ce se kreirati stablo:" << endl;
  167. cout << "5, 3, 11, 20, 15, 1" << endl;
  168. cout << "----" << endl;
  169. cout << "Kreiram korijen 5 ..." << endl;
  170. array_tree* T = array_InitB(5, T);
  171. cout << "Kreiram lijevo dijete korijenu 5 -> 3 ..." << endl;
  172. array_CreateLeftB(3, array_RootB(T), T);
  173. cout << "Kreiram desno dijete korijenu 5 -> 11 ... " << endl;
  174. array_CreateRightB(11, array_RootB(T), T);
  175. cout << "Kreiram lijevo dijete cvoru 11 -> 20 ..." << endl;
  176. array_CreateLeftB(20, 11, T);
  177. cout << "Kreiram desno dijete cvoru 11 -> 15 ..." << endl;
  178. array_CreateRightB(15, 11, T);
  179. cout << "Kreiram desno dijete cvoru 3 -> 4 ..." << endl;
  180. array_CreateRightB(4, 3, T);
  181. cout << "Kreiram lijevo dijete cvoru 1 -> 3 ..." << endl;
  182. array_CreateLeftB(1, 3, T);
  183.  
  184. cout << "Oznaka cvora 5 je: " << array_LabelB(array_RootB(T), T);
  185. cout << endl;
  186. cout << "Promjena oznake sa: " << array_LabelB(array_RootB(T), T) << " na 11" << endl;
  187. array_ChangeLabelB(11, array_RootB(T), T);
  188. cout << "Nova oznaka cvora je: " << array_LabelB(array_RootB(T), T) << endl;
  189.  
  190. cout << "Roditelj cvora 11 je: ";
  191. cout << array_LabelB(array_ParentB(11, T), T) << endl;
  192. cout << "Lijevo dijete korijena je: ";
  193. cout << array_LabelB(array_LeftChildB(5, T), T) << endl;
  194. cout << "Desno dijete cvora 3 je: ";
  195. cout << array_LabelB(array_RightChildB(3, T), T) << endl;
  196.  
  197. cout << "Brisanje stabla ...";
  198. array_DeleteB(5, T);
  199. T = NULL;
  200.  
  201. cout << "Stablo je uspjesno obrisano." << endl;
  202. cout << "\nZa povratak u Glavni izbornik pritisnite: Enter";
  203. cin.ignore(); cin.get();
  204. }
  205.  
  206. void hrpa()
  207. {
  208. int cvor;
  209. char dn;
  210. cout << "Instanciranje hrpe ..." << endl;
  211. cout << "-----" << endl;
  212. array_tree* H = array_InitB(2, H);
  213. cout << "Hrpa je kreirana s korijenom 2.\nKreiram ostale elemente hrpe ..." << endl;
  214. InsertH(3, H);
  215. cout << "Kreiran element 3 ..." << endl;
  216. InsertH(11, H);
  217. cout << "Kreiran element 11 ..." << endl;
  218. InsertH(7, H);
  219. cout << "Kreiran element 7 ..." << endl;
  220. InsertH(21, H);
  221. cout << "Kreiran element 21!\n\nZavrseno kreiranje hrpe.\n\nZelite li nadodati jos koji element? (d/n): ";
  222. cin >> dn;
  223.  
  224. if(dn == 'd')
  225. {
  226. do{
  227. cout << "Unesite broj po zelji: ";
  228. cin >> cvor;
  229. InsertH(cvor, H);
  230. cout << "Uspjesno je dodan broj: " << cvor << "!" << endl << endl;
  231. cout << "----" << endl;
  232. cout << "Zelite li dodati jos elemenata? (d/n): ";
  233. cin >> dn;
  234. }while(dn == 'd');
  235. }
  236.  
  237. cout << "Brojevi nakon Heap Sorta: " << endl;
  238. cout << "--------" << endl;
  239. SortH(H);
  240. cout << endl << endl;
  241.  
  242. cout << "\nZa povratak u Glavni izbornik pritisnite: Enter";
  243. cin.ignore(); cin.get();
  244. }
  245.  
  246. void binarno_pretrazivanje()
  247. {
  248. int cvor;
  249. char dn;
  250. cout << "Instanciranje binarnog stabla pretrazivanje ..." << endl;
  251. cout << "-----" << endl;
  252. pok_element* T = InitB(2, T);
  253. cout << "Hrpa je kreirana s korijenom 2.\nKreiram ostale elemente hrpe ..." << endl;
  254. InsertBS(3, T);
  255. cout << "Kreiran element 3 ..." << endl;
  256. InsertBS(11, T);
  257. cout << "Kreiran element 11 ..." << endl;
  258. InsertBS(7, T);
  259. cout << "Kreiran element 7 ..." << endl;
  260. InsertBS(21, T);
  261. cout << "Kreiran element 21!\n\nZavrseno kreiranje stabla.\n\nZelite li nadodati jos koji element? (d/n): ";
  262. cin >> dn;
  263.  
  264. if(dn == 'd')
  265. {
  266. do{
  267. cout << "Unesite broj po zelji: ";
  268. cin >> cvor;
  269. InsertBS(cvor, T);
  270. cout << "Uspjesno je dodan broj: " << cvor << "!" << endl << endl;
  271. cout << "----" << endl;
  272. cout << "Zelite li dodati jos elemenata? (d/n): ";
  273. cin >> dn;
  274. }while(dn == 'd');
  275. }
  276.  
  277. cout << "Unesite element koji zelite pretraziti unutar stabla: ";
  278. cin >> cvor;
  279. searchBT(cvor, T);
  280.  
  281. cout << "\nZa povratak u Glavni izbornik pritisnite: Enter";
  282. cin.ignore(); cin.get();
  283. }
  284.  
  285. int main(){
  286. int izbor;
  287. do{
  288. system("cls");
  289. cout << "Izbornik" << endl;
  290. cout << "---------------" << endl;
  291. cout << "Implementacije ATP stabla:" << endl << endl;
  292. cout << "1. Opcenito stablo" << endl;
  293. cout << "2. Binarno stablo pomocu pokazivaca" << endl;
  294. cout << "3. Binarno stablo pomocu polja" << endl;
  295. cout << "4. Binarno stablo pretrazivanja" << endl;
  296. cout << "5. Sortiranje hrpom" << endl;
  297. cout << "0. Izlazak iz programa" << endl;
  298. cout << "---------------" << endl;
  299. do{
  300. cout << "Koji je Vas odabir: ";
  301. cin >> izbor;
  302. if(izbor < 0 || izbor > 5) cout << "Unesena opcija nije podrzana! Unesite jedno od pondenih opcija." << endl << endl;
  303. }while(izbor < 0 || izbor > 5);
  304. cout << endl;
  305.  
  306. switch(izbor){
  307. case 1:
  308. system("cls");
  309. cout << "Pokretanje implementacije za: Opcenito stablo ..." << endl;
  310. Sleep(500);
  311. opcenito_stablo();
  312. cin.ignore();
  313. (void)cin.get();
  314. break;
  315. case 2:
  316. system("cls");
  317. Sleep(500);
  318. binarno_pokazivac();
  319. break;
  320. case 3:
  321. system("cls");
  322. Sleep(500);
  323. binarno_polje();
  324. break;
  325. case 4:
  326. system("cls");
  327. Sleep(500);
  328. binarno_pretrazivanje();
  329. break;
  330. case 5:
  331. system("cls");
  332. Sleep(500);
  333. hrpa();
  334. break;
  335. default: break;
  336. }
  337. }
  338. while(izbor);
  339. return 0;
  340. }

Report this snippet  

You need to login to post a comment.