Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdlib.h>
- typedef struct nodLista
- {
- char nume_produs[20];
- int cantitate;
- struct nodLista *next;
- }sublista;
- typedef struct nodArbore
- {
- char nume_magazin[20];
- int contor;
- struct nodArbore *stang, *drept;
- sublista *head;
- }arbore;
- arbore *radacina = NULL;
- sublista *adaugare_nod_lista(sublista *head, char* nume_produs, int cantitate)
- {
- sublista *NodAdaugare,*NodParcurgere;
- NodAdaugare = (sublista*)malloc(sizeof(sublista));
- strcpy(NodAdaugare->nume_produs, nume_produs);
- NodAdaugare->cantitate = cantitate;
- NodAdaugare->next = NULL;
- if (head == NULL)
- {
- head = NodAdaugare;
- return head;
- }
- else
- if (strcmp(head->nume_produs, nume_produs) > 0)
- {
- NodAdaugare->next = head;
- head = NodAdaugare;
- return head;
- }
- else
- {
- NodParcurgere = head;
- while (NodParcurgere->next != NULL && strcmp(nume_produs, NodParcurgere->nume_produs) > 0)
- NodParcurgere = NodParcurgere->next;
- NodAdaugare->next = NodParcurgere->next;
- NodParcurgere->next = NodAdaugare;
- return head;
- }
- }
- arbore *adaugare_nod_arbore(arbore *root, char* nume_magazin, char* nume_produs, int cantitate)
- {
- if (root == NULL)
- {
- root = (arbore*)malloc(sizeof(arbore));
- strcpy(root->nume_magazin, nume_magazin);
- root->head = NULL;
- root->stang = root->drept = NULL;
- root->head = adaugare_nod_lista(root->head, nume_produs, cantitate);
- root->contor = 0;
- root->contor++;
- }
- else
- if (strcmp(root->nume_magazin, nume_magazin) > 0)
- root->stang = adaugare_nod_arbore(root->stang, nume_magazin, nume_produs, cantitate);
- else
- if (strcmp(root->nume_magazin, nume_magazin) < 0)
- root->drept = adaugare_nod_arbore(root->drept, nume_magazin, nume_produs, cantitate);
- else
- {
- root->head = adaugare_nod_lista(root->head, nume_produs, cantitate);
- root->contor++;
- }
- return root;
- }
- void citire_fisier()
- {
- FILE *pointer_file;
- char nume_magazin[20];
- char nume_produs[20];
- int cantitate;
- pointer_file = fopen("data.txt", "r");
- while (!feof(pointer_file))
- {
- fscanf(pointer_file, "%s %s %d", nume_magazin, nume_produs, &cantitate);
- radacina = adaugare_nod_arbore(radacina, nume_magazin, nume_produs, cantitate);
- }
- fclose(pointer_file);
- }
- arbore *valoareminima(arbore *root)
- {
- arbore *NodCurent = root;
- while (NodCurent->stang != NULL)
- NodCurent = NodCurent->stang;
- return NodCurent;
- }
- arbore *stergere(arbore *root, char* nume_magazin)
- {
- arbore *temp;
- if (root == NULL)
- return root;
- if (strcmp(nume_magazin, root->nume_magazin) < 0)
- root->stang = stergere(root->stang, nume_magazin);
- else
- if (strcmp(nume_magazin, root->nume_magazin) > 0)
- root->drept = stergere(root->drept, nume_magazin);
- else
- {
- if (root->stang == NULL)
- {
- temp = root->drept;
- free(root);
- return temp;
- }
- else
- if (root->drept == NULL)
- {
- temp = root->stang;
- free(root);
- return temp;
- }
- temp = valoareminima(root->drept);
- root->head = temp->head;
- root->contor = temp->contor;
- strcpy(root->nume_magazin, temp->nume_magazin);
- root->drept = stergere(root->drept, temp->nume_magazin);
- }
- return root;
- }
- arbore *stergere2(arbore *root, int contor)
- {
- arbore *temp;
- if (root == NULL)
- return NULL;
- root->stang = stergere2(root->stang, contor);
- root->drept = stergere2(root->drept, contor);
- if (root->contor == contor)
- {
- if (root->stang == NULL)
- {
- temp = root->drept;
- free(root);
- return temp;
- }
- else
- if (root->drept == NULL)
- {
- temp = root->stang;
- free(root);
- return temp;
- }
- temp = valoareminima(root->drept);
- root->head = temp->head;
- strcpy(root->nume_magazin, temp->nume_magazin);
- root->contor = temp->contor;
- root->drept = stergere(root->drept, temp->nume_magazin);
- }
- return root;
- }
- void afisare(arbore *root)
- {
- arbore *temp;
- temp = root;
- sublista *headLista;
- if (temp != NULL)
- {
- afisare(temp->stang);
- headLista = temp->head;
- while (headLista != NULL)
- {
- printf("Nume magazin:%s Nume produs:%s Cantitate:%d Contor:%d\n", temp->nume_magazin, headLista->nume_produs, headLista->cantitate, temp->contor);
- headLista = headLista->next;
- }
- afisare(temp->drept);
- }
- }
- void main()
- {
- int optiune;
- int contor;
- char nume_magazin[20];
- do {
- printf("1.Citire din fisier\n");
- printf("2.Afisare\n");
- printf("3.Stergere\n");
- printf("4.Stergere conditionata\n");
- printf("Dati optiunea:");
- scanf("%d", &optiune);
- switch (optiune)
- {
- case 1:
- citire_fisier();
- break;
- case 2:
- afisare(radacina);
- break;
- case 3:
- printf("Dati numele magazinului care urmeaza sa fie sters:");
- scanf("%s", nume_magazin);
- radacina = stergere(radacina, nume_magazin);
- case 4:
- printf("Dati contorul pe care vreti sa il stergeti:");
- scanf("%d", &contor);
- radacina = stergere2(radacina, contor);
- }
- } while (optiune != 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement