Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. #define novi(x) x=(drvo *) malloc(sizeof(drvo))
  6.  
  7. typedef struct drvo
  8. {
  9. int balans;
  10. struct drvo *levi;
  11. struct drvo *desni;
  12. float visina;
  13. char jmbg[14];
  14. } drvo;
  15.  
  16. int dubina(drvo *p)
  17. {
  18. if (!p) return 0;
  19. int dd=0,dl=0;
  20. if (p->levi) dl=dubina(p->levi);
  21. if (p->desni) dd=dubina(p->desni);
  22.  
  23. if (dd>dl)
  24. {
  25. return ++dd;
  26. }
  27. else return ++dl;
  28. }
  29. /*
  30. void drotacija(drvo **p)
  31. {
  32. drvo *pomd=*p;
  33. drvo *poml=pomd->levi;
  34. pomd->levi=poml->desni;
  35. poml->desni=pomd;
  36. *p=poml;
  37. poml->balans=dubina(poml->desni)-dubina(poml->levi);
  38. pomd->balans=dubina(pomd->desni)-dubina(pomd->levi);
  39. }
  40.  
  41. void lrotacija(drvo **p)
  42. {
  43. drvo *poml=*p;
  44. drvo *pomd=poml->desni;
  45. poml->desni=pomd->levi;
  46. pomd->levi=poml;
  47. *p=pomd;
  48. poml->balans=dubina(poml->desni)-dubina(poml->levi);
  49. pomd->balans=dubina(pomd->desni)-dubina(pomd->levi);
  50. }
  51.  
  52. int dodaj(drvo **p,float visina,char jmbg[])
  53. {
  54. int inkrement,rezultat;
  55. drvo *p1=*p;
  56. rezultat=0;
  57. if (!p1)
  58. {
  59. novi(p1);
  60. if (!p1)
  61. {
  62. printf("greska pri aloc");
  63. exit(1);
  64. }
  65.  
  66.  
  67. p1->visina=visina;
  68. strcpy(p1->jmbg,jmbg);
  69. p1->levi=p1->desni=NULL;
  70. p1->balans=0;
  71. rezultat=1;
  72. }
  73. else
  74. {
  75. if (visina > p1->visina) inkrement=dodaj(&(p1->desni),visina,jmbg);
  76. else inkrement=-dodaj(&(p1->levi),visina,jmbg);
  77. p1->balans+=inkrement;
  78.  
  79. if (inkrement!=0 && p1->balans!=0)
  80. {
  81. if (p1->balans<-1)
  82. {
  83. if (p1->levi->balans<0) drotacija(&p1);
  84. else { lrotacija(&(p1->levi)); drotacija(&p1); }
  85. }
  86. else if (p1->balans>1)
  87. {
  88. if (p1->desni->balans>0) lrotacija(&p1);
  89. else {drotacija(&(p1->desni)); lrotacija(&p1); }
  90. }
  91. else rezultat=1;
  92. }
  93. }
  94. *p=p1;
  95. return rezultat;
  96. }*/
  97.  
  98.  
  99.  
  100. void ispis(drvo *p)
  101. {
  102. if (!p) return;
  103. ispis(p->levi);
  104. printf("%f %s\n",p->visina,p->jmbg);
  105. ispis(p->desni);
  106. }
  107.  
  108. void lrotacija(drvo **p)
  109. {
  110. drvo *poml=*p;
  111. drvo *pomd=poml->desni;
  112. poml->desni=pomd->levi;
  113. pomd->levi=poml;
  114. *p=pomd;
  115. poml->balans=dubina(poml->desni)-dubina(poml->levi);
  116. pomd->balans=dubina(pomd->desni)-dubina(pomd->levi);
  117. }
  118.  
  119. void drotacija(drvo **p)
  120. {
  121. drvo *pomd=*p;
  122. drvo *poml=pomd->levi;
  123. pomd->levi=poml->desni;
  124. poml->desni=pomd;
  125. *p=poml;
  126. poml->balans=dubina(poml->desni)-dubina(poml->levi);
  127. pomd->balans=dubina(pomd->desni)-dubina(pomd->levi);
  128. }
  129.  
  130. int dodaj(drvo **p,float visina,char jmbg[])
  131. {
  132. int inkrement;
  133. drvo *p1=*p;
  134. if (!p1)
  135. {
  136. novi(p1);
  137. if (!p1)
  138. {
  139. printf("aloc");
  140. exit(1);
  141. }
  142. p1->visina=visina;
  143. strcpy(p1->jmbg,jmbg);
  144. p1->balans=0;
  145. p1->levi=NULL;
  146. p1->desni=NULL;
  147. }
  148. else
  149. {
  150. if (visina>p1->visina) inkrement=dodaj(&p1->desni,visina,jmbg);
  151. else inkrement=-dodaj(&p1->levi,visina,jmbg);
  152. p1->balans+=inkrement;
  153.  
  154. if (p1->balans<-1)
  155. {
  156. if (p1->levi->balans<0) drotacija(&p1);
  157. else { lrotacija(&p1->levi); drotacija(&p1); }
  158. }
  159. else if (p1->balans>1)
  160. {
  161. if (p1->desni->balans>0) lrotacija(&p1);
  162. else { drotacija(&p1->desni); lrotacija(&p1); }
  163. }
  164. }
  165. *p=p1;
  166. return 1;
  167. }
  168. drvo *formiraj()
  169. {
  170. drvo *p=NULL;
  171. int i,n;char jmbg[14];float visina;
  172. scanf("%d",&n);
  173. for(i=0;i<n;i++)
  174. {
  175. scanf("%f",&visina);
  176. scanf("%s",jmbg);
  177. dodaj(&p,visina,jmbg);
  178. }
  179. return p;
  180. }
  181.  
  182. /*Korišćenjem stabala napisati program koji na najefikasniji način pronalazi i štampa
  183. matični broj najnižeg deteta koje se može voziti na ringišpilu, ukoliko se zna da je
  184. ulaz na ringišpil dozvoljen samo deci iznad zadate visine.*/
  185.  
  186. void najnize(drvo *p,int k,drvo **min)
  187. {
  188. if (!p) return;
  189. if (p->visina>k && p->visina<(*min)->visina) *min=p;
  190. /*else if (p->visina<k) najnize(p->desni,k,min);
  191. else if (p->visina>k) { */najnize(p->desni,k,min); najnize(p->levi,k,min);
  192. }
  193.  
  194. void prosek(drvo *p,int *brojdece,float k,float *visine)
  195. {
  196. if (!p) return;
  197. if (p->visina<k) { (*brojdece)++; *visine=(*visine)+p->visina; }
  198. prosek(p->levi,brojdece,k,visine);prosek(p->desni,brojdece,k,visine);
  199. }
  200.  
  201. main()
  202. {
  203. drvo *p=NULL,*min; novi(min);
  204. min->visina=200;
  205. p=formiraj();
  206. ispis(p);
  207. najnize(p,12,&min);
  208. if (min->visina==200) printf("nema");else printf("%s\n",min->jmbg);
  209. int brojdece=0;float visine=0;
  210. prosek(p,&brojdece,120,&visine);
  211. printf("%f",visine/brojdece);
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement