Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.93 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. typedef struct nodLista
  6. {
  7. char nume_produs[20];
  8. int cantitate;
  9. struct nodLista *next;
  10. }sublista;
  11. typedef struct nodArbore
  12. {
  13. char nume_magazin[20];
  14. int contor;
  15. struct nodArbore *stang, *drept;
  16. sublista *head;
  17. }arbore;
  18. arbore *radacina = NULL;
  19. sublista *adaugare_nod_lista(sublista *head, char* nume_produs, int cantitate)
  20. {
  21. sublista *NodAdaugare,*NodParcurgere;
  22. NodAdaugare = (sublista*)malloc(sizeof(sublista));
  23. strcpy(NodAdaugare->nume_produs, nume_produs);
  24. NodAdaugare->cantitate = cantitate;
  25. NodAdaugare->next = NULL;
  26. if (head == NULL)
  27. {
  28. head = NodAdaugare;
  29. return head;
  30. }
  31. else
  32. if (strcmp(head->nume_produs, nume_produs) > 0)
  33. {
  34. NodAdaugare->next = head;
  35. head = NodAdaugare;
  36. return head;
  37. }
  38. else
  39. {
  40. NodParcurgere = head;
  41. while (NodParcurgere->next != NULL && strcmp(nume_produs, NodParcurgere->nume_produs) > 0)
  42. NodParcurgere = NodParcurgere->next;
  43. NodAdaugare->next = NodParcurgere->next;
  44. NodParcurgere->next = NodAdaugare;
  45. return head;
  46. }
  47. }
  48. arbore *adaugare_nod_arbore(arbore *root, char* nume_magazin, char* nume_produs, int cantitate)
  49. {
  50. if (root == NULL)
  51. {
  52. root = (arbore*)malloc(sizeof(arbore));
  53. strcpy(root->nume_magazin, nume_magazin);
  54. root->head = NULL;
  55. root->stang = root->drept = NULL;
  56. root->head = adaugare_nod_lista(root->head, nume_produs, cantitate);
  57. root->contor = 0;
  58. root->contor++;
  59. }
  60. else
  61. if (strcmp(root->nume_magazin, nume_magazin) > 0)
  62. root->stang = adaugare_nod_arbore(root->stang, nume_magazin, nume_produs, cantitate);
  63. else
  64. if (strcmp(root->nume_magazin, nume_magazin) < 0)
  65. root->drept = adaugare_nod_arbore(root->drept, nume_magazin, nume_produs, cantitate);
  66. else
  67. {
  68. root->head = adaugare_nod_lista(root->head, nume_produs, cantitate);
  69. root->contor++;
  70. }
  71. return root;
  72. }
  73. void citire_fisier()
  74. {
  75. FILE *pointer_file;
  76. char nume_magazin[20];
  77. char nume_produs[20];
  78. int cantitate;
  79. pointer_file = fopen("data.txt", "r");
  80. while (!feof(pointer_file))
  81. {
  82. fscanf(pointer_file, "%s %s %d", nume_magazin, nume_produs, &cantitate);
  83. radacina = adaugare_nod_arbore(radacina, nume_magazin, nume_produs, cantitate);
  84. }
  85. fclose(pointer_file);
  86. }
  87. arbore *valoareminima(arbore *root)
  88. {
  89. arbore *NodCurent = root;
  90. while (NodCurent->stang != NULL)
  91. NodCurent = NodCurent->stang;
  92. return NodCurent;
  93. }
  94. arbore *stergere(arbore *root, char* nume_magazin)
  95. {
  96. arbore *temp;
  97. if (root == NULL)
  98. return root;
  99. if (strcmp(nume_magazin, root->nume_magazin) < 0)
  100. root->stang = stergere(root->stang, nume_magazin);
  101. else
  102. if (strcmp(nume_magazin, root->nume_magazin) > 0)
  103. root->drept = stergere(root->drept, nume_magazin);
  104. else
  105. {
  106. if (root->stang == NULL)
  107. {
  108. temp = root->drept;
  109. free(root);
  110. return temp;
  111. }
  112. else
  113. if (root->drept == NULL)
  114. {
  115. temp = root->stang;
  116. free(root);
  117. return temp;
  118. }
  119. temp = valoareminima(root->drept);
  120. root->head = temp->head;
  121. root->contor = temp->contor;
  122. strcpy(root->nume_magazin, temp->nume_magazin);
  123. root->drept = stergere(root->drept, temp->nume_magazin);
  124. }
  125. return root;
  126. }
  127. arbore *stergere2(arbore *root, int contor)
  128. {
  129. arbore *temp;
  130. if (root == NULL)
  131. return NULL;
  132. root->stang = stergere2(root->stang, contor);
  133. root->drept = stergere2(root->drept, contor);
  134. if (root->contor == contor)
  135. {
  136. if (root->stang == NULL)
  137. {
  138. temp = root->drept;
  139. free(root);
  140. return temp;
  141. }
  142. else
  143. if (root->drept == NULL)
  144. {
  145. temp = root->stang;
  146. free(root);
  147. return temp;
  148. }
  149. temp = valoareminima(root->drept);
  150. root->head = temp->head;
  151. strcpy(root->nume_magazin, temp->nume_magazin);
  152. root->contor = temp->contor;
  153. root->drept = stergere(root->drept, temp->nume_magazin);
  154. }
  155. return root;
  156. }
  157. void afisare(arbore *root)
  158. {
  159. arbore *temp;
  160. temp = root;
  161. sublista *headLista;
  162. if (temp != NULL)
  163. {
  164. afisare(temp->stang);
  165. headLista = temp->head;
  166. while (headLista != NULL)
  167. {
  168. printf("Nume magazin:%s Nume produs:%s Cantitate:%d Contor:%d\n", temp->nume_magazin, headLista->nume_produs, headLista->cantitate, temp->contor);
  169. headLista = headLista->next;
  170. }
  171. afisare(temp->drept);
  172. }
  173. }
  174. void main()
  175. {
  176. int optiune;
  177. int contor;
  178. char nume_magazin[20];
  179. do {
  180. printf("1.Citire din fisier\n");
  181. printf("2.Afisare\n");
  182. printf("3.Stergere\n");
  183. printf("4.Stergere conditionata\n");
  184. printf("Dati optiunea:");
  185. scanf("%d", &optiune);
  186. switch (optiune)
  187. {
  188. case 1:
  189. citire_fisier();
  190. break;
  191. case 2:
  192. afisare(radacina);
  193. break;
  194. case 3:
  195. printf("Dati numele magazinului care urmeaza sa fie sters:");
  196. scanf("%s", nume_magazin);
  197. radacina = stergere(radacina, nume_magazin);
  198. case 4:
  199. printf("Dati contorul pe care vreti sa il stergeti:");
  200. scanf("%d", &contor);
  201. radacina = stergere2(radacina, contor);
  202. }
  203. } while (optiune != 0);
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement