Posted By

zeko868 on 01/20/15


Tagged

- dijete sljedei headerimplementacijastabloprvo bratpolje


Versions (?)

pdsb_polje.h


 / Published in: C++
 

Implementacija općenitog stabla "prvo dijete - sljedeći brat" uz pomoć polja

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. struct telement1 {
  5. char oznaka[4];
  6. int prvodijete,sljedecibrat;
  7. };
  8. struct tstablo {
  9. struct telement1 element[10000];
  10. int pocetak;
  11. };
  12. tstablo stablo1;
  13. short permutacija;
  14.  
  15. int ParentT(int cvor,tstablo &stablo) {
  16. if (cvor==stablo.pocetak)
  17. return -1;
  18. else
  19. for (int i=0;i<10000;i++)
  20. if (stablo.element[i].prvodijete==cvor)
  21. return i;
  22. else if (stablo.element[i].sljedecibrat==cvor)
  23. ParentT(i,stablo);
  24. }
  25. int FirstChildT(int cvor,tstablo &stablo) {
  26. return stablo.element[cvor].prvodijete;
  27. }
  28. int NextSiblingT(int cvor,tstablo &stablo) {
  29. return stablo.element[cvor].sljedecibrat;
  30. }
  31. char* LabelT(int cvor,tstablo &stablo) {
  32. return stablo.element[cvor].oznaka;
  33. }
  34. int RootT(tstablo &stablo) {
  35. return stablo.pocetak;
  36. }
  37. void CreateT(int vrij_elem,int cvor,tstablo &stablo) {
  38. telement1 prazan_niz;
  39. memset(&prazan_niz,-1,sizeof(telement1));
  40. if (memcmp(&stablo.element[cvor],&prazan_niz,sizeof(telement1))==0) {
  41. cerr<<"Greska! (nepostojeci roditelj)"<<endl;
  42. return;
  43. }
  44. if (memcmp(&stablo.element[vrij_elem],&prazan_niz,sizeof(telement1))!=0) {
  45. cerr<<"Greska! (navedena vrijednost se vec nalazi u stablu)"<<endl;
  46. return;
  47. }
  48. char oznaka[4]={permutacija/27/26>0?64+permutacija/27/26:(permutacija/26>0?64+permutacija/26:65+permutacija),permutacija/27/26>0?64+permutacija/26%26:(permutacija/26>0?65+permutacija%26:'\0'),permutacija/27/26>0?65+permutacija%26:'\0','\0'};
  49. static int roditelj_djece=-1;
  50. if (roditelj_djece==-1)
  51. roditelj_djece=cvor;
  52. static bool go_to_child=true;
  53. if (stablo.element[roditelj_djece].prvodijete==-1) {
  54. stablo.element[roditelj_djece].prvodijete=vrij_elem;
  55. strcpy(stablo.element[vrij_elem].oznaka,oznaka);
  56. permutacija++;
  57. }
  58. else {
  59. if (go_to_child==true) {
  60. cvor=stablo.element[cvor].prvodijete;
  61. go_to_child=false;
  62. }
  63. if (stablo.element[cvor].sljedecibrat==-1) {
  64. stablo.element[cvor].sljedecibrat=vrij_elem;
  65. strcpy(stablo.element[vrij_elem].oznaka,oznaka);
  66. permutacija++;
  67. }
  68. else {
  69. CreateT(vrij_elem,stablo.element[cvor].sljedecibrat,stablo);
  70. }
  71. }
  72. roditelj_djece=-1;
  73. go_to_child=true;
  74. }
  75. void ChangeLabelT (char* nova_oznaka,int cvor,tstablo &stablo) {
  76. int prazan=-1;
  77. if (memcmp(&stablo.element[cvor].oznaka,&prazan,sizeof(int))!=0)
  78. strcpy(stablo.element[cvor].oznaka,nova_oznaka);
  79. else
  80. cerr<<"Greska! (ne postoji cvor sa navedenom vrijednoscu unutar stabla)"<<endl;
  81. }
  82. void DeleteT(int cvor,tstablo &stablo) {
  83. static int prvi_put=-1;
  84. if (prvi_put==-1)
  85. prvi_put=cvor;
  86. if (stablo.element[cvor].sljedecibrat!=-1)
  87. DeleteT(stablo.element[cvor].sljedecibrat,stablo);
  88. if (stablo.element[cvor].prvodijete!=-1)
  89. DeleteT(stablo.element[cvor].prvodijete,stablo);
  90. stablo.element[cvor].sljedecibrat=-1;
  91. stablo.element[cvor].prvodijete=-1;
  92. memset(stablo.element[cvor].oznaka,-1,sizeof(int));
  93. if (cvor==prvi_put) {
  94. prvi_put=-1;
  95. if (cvor==stablo.pocetak)
  96. stablo.pocetak=-1;
  97. else
  98. for (int i=0;i<10000;i++)
  99. if (stablo.element[i].sljedecibrat==cvor) {
  100. stablo.element[i].sljedecibrat=-1;
  101. break;
  102. }
  103. else if (stablo.element[i].prvodijete==cvor) {
  104. stablo.element[i].prvodijete=-1;
  105. break;
  106. }
  107. }
  108. }
  109. void InitT (int korijen_vrijednost,tstablo &stablo) {
  110. permutacija=0;
  111. memset(&stablo,-1,sizeof(tstablo));
  112. stablo.pocetak=korijen_vrijednost;
  113. char oznaka[4]={permutacija/27/26>0?64+permutacija/27/26:(permutacija/26>0?64+permutacija/26:65+permutacija),permutacija/27/26>0?64+permutacija/26%26:(permutacija/26>0?65+permutacija%26:'\0'),permutacija/27/26>0?65+permutacija%26:'\0','\0'};
  114. strcpy(stablo.element[korijen_vrijednost].oznaka,oznaka);
  115. permutacija++;
  116. }

Report this snippet  

You need to login to post a comment.