Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4.  
  5. //korak1
  6. typedef struct node_st{
  7.  
  8. char oznaka[3];
  9. char bioskop[11];
  10. char film[9];
  11. char zanr[10];
  12. double cena;
  13. struct node_st * left;
  14. struct node_st * right;
  15. }node;
  16.  
  17. void insert(node ** root,char oznaka[], char bioskop[],
  18. char film[], char zanr[],double cena ){
  19.  
  20. if(*root == NULL){
  21. node * tmp = (node*) malloc(sizeof(node));
  22. strcpy(tmp->oznaka,oznaka);
  23. strcpy(tmp->bioskop,bioskop);
  24. strcpy(tmp->film,film);
  25. strcpy(tmp->zanr,zanr);
  26. tmp->cena = cena;
  27. tmp->left= NULL;
  28. tmp->right= NULL;
  29. *root = tmp;
  30. return;
  31. }
  32. if(cena < (*root)->cena){
  33. insert(&(*root)->left,oznaka,bioskop,film,zanr,cena);
  34. }else{
  35. insert(&(*root)->right,oznaka,bioskop,film,zanr,cena);
  36. }
  37. }
  38. void printTree(node * root){
  39.  
  40. if(root == NULL){
  41. return;
  42. }
  43. printTree(root->left);
  44. printf("%s %s %s %s %lf\n",
  45. root->oznaka,root->bioskop,root->film,root->zanr,root->cena);
  46. printTree(root->right);
  47.  
  48. }
  49.  
  50. void ucitajIzFajla(char nazivFajla[], node ** root){
  51.  
  52. FILE *f = fopen(nazivFajla,"r");
  53. if(f == NULL){
  54. printf("Greska prilikom otvaranja ulaznog fajla!\n");
  55. exit(1);
  56. }
  57. char oznaka[3];
  58. char bioskop[11];
  59. char film[9];
  60. char zanr[10];
  61. double cena;
  62. while(fscanf(f, "%s %s %s %s %lf",oznaka,bioskop,film,zanr,&cena) != EOF){
  63. insert(root,oznaka,bioskop,film,zanr,cena);
  64. }
  65.  
  66. }
  67.  
  68. void deleteTree(node ** root){
  69. if(*root == NULL){
  70. return;
  71. }
  72. deleteTree(&(*root)->left);
  73. deleteTree(&(*root)->right);
  74. free(*root);
  75. *root = NULL;
  76. }
  77.  
  78. node* minZaGrad(node * root, char oznaka[]){
  79. if(root == NULL){
  80. return NULL;
  81. }
  82. node* best = NULL;
  83. //ukoliko je trenutni koren odgovarajuceg kriterijuma -> postaje kandidat za najmanju cenu
  84. if(strcmp(root->oznaka,oznaka) == 0){
  85. best = root;
  86. }
  87. //trazimo najbolji iz levog podstabla, i ukoliko je on bolji od trenutnog najboljeg ili je trenutni najbolji NULL, postavljamo trenutni najbolji na najbolji iz levog
  88. node * leftBest = minZaGrad(root->left, oznaka);
  89. if(leftBest != NULL){
  90. if(best == NULL || leftBest->cena < best->cena){
  91. best = leftBest;
  92. }
  93. }
  94. node *rightBest = minZaGrad(root->right,oznaka);
  95. if(rightBest != NULL){
  96. if(best == NULL || rightBest->cena < best->cena){
  97. best = rightBest;
  98. }
  99. }
  100. return best;
  101. }
  102.  
  103.  
  104. void main(){
  105. node* root = NULL;
  106. ucitajIzFajla("ulaz.txt",&root);
  107. printTree(root);
  108.  
  109. node * najbolji = minZaGrad(root,"NS");
  110. if(najbolji != NULL)
  111. printf("Najbolji u NS: %s %s %s %s %lf\n",
  112. najbolji->oznaka,najbolji->bioskop,najbolji->film,najbolji->zanr,najbolji->cena);
  113. else
  114. printf("Ne postoji takav\n");
  115.  
  116. deleteTree(&root);
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement