Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Structuri de date și algoritmi
Lucrare de laborator nr. 10/11
Varianta: 5
Chișinău 2022
Scopul lucrării: Obţinerea deprinderilor practice de implementare și de
utilizare a tipului abstract de date (TAD) „Arbore binar” cu asigurarea operațiilor
de prelucrare de bază ale arborelui binar oarecare prin parcurgerea nodurilor
arborelui “în lăţime” şi “în adâncime”, folosind structurile respective de date
“coadă” şi “stivă”.
Programul elaborat:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lab4.h"
Marfa *pop(void)
{
ElStack *t;
Marfa *v;
t = top;
v = t->adr;
3
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
top = t->prev;
free(t);
return v;
}
int createQueue(void)
{
Marfa *p, *s;
int d, f;
root = NULL;
first = last = NULL;
printf("Doriti sa creati un arbore(radacina)? (1/0): ");
scanf("%d", &f);
if(f == 0)
{
puts("Arborele nu a fost creat, memoria nu a fost alocata!");
return 0;
}
p = (Marfa*)malloc(sizeof(*p));
if(p == NULL)
{
return -1;
}
puts("Memoria a fost alocata cu succes!");
puts("\nDati informatia pentru radacina: ");
puts("________________________________");
printf("- Denumire: ");
fflush(stdin);
gets(p->name);
printf("- Proprietar: ");
fflush(stdin);
gets(p->owner);
printf("- Tip: ");
fflush(stdin);
gets(p->type);
printf("- Adresa: ");
fflush(stdin);
gets(p->addr);
printf("- Suprafata: ");
scanf("%d", &p->surf);
printf("- Pret: ");
scanf("%d", &p->price);
d = inQueue(p);
if(d == 0)
{
return -2;
}
root = p;
while(first!=NULL)
{
p = delQueue();
printf("\nDoriti sa creati copilul stang al nodului %s ? (1/0): ", p->name);
4
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
scanf("%d", &f);
if(f!=0)
{
s = (Marfa*)malloc(sizeof(*s));
if(s == NULL)
{
return -3;
}
p->left = s;
puts("Dati informatia pentru nod:");
puts("___________________________");
printf("- Denumire: ");
fflush(stdin);
gets(s->name);
printf("- Proprietar: ");
fflush(stdin);
gets(s->owner);
printf("- Tip: ");
fflush(stdin);
gets(s->type);
printf("- Adresa: ");
fflush(stdin);
gets(s->addr);
printf("- Suprafata: ");
scanf("%d", &s->surf);
printf("- Pret: ");
scanf("%d", &s->price);
d = inQueue(s);
if(d == 0)
{
return -2;
}
} else {
p->left = NULL;
}
printf("\nDoriti sa creati copilul drept al nodului %s? (1/0): ", p->name);
scanf("%d", &f);
if(f!=0)
{
s = (Marfa*)malloc(sizeof(*s));
if(s == NULL){
return -3;
}
p->right = s;
puts("Dati informatia pentru nod:");
puts("___________________________");
printf("- Denumire: ");
fflush(stdin);
gets(s->name);
printf("- Proprietar: ");
fflush(stdin);
5
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
gets(s->owner);
printf("- Tip: ");
fflush(stdin);
gets(s->type);
printf("- Adresa: ");
fflush(stdin);
gets(s->addr);
printf("- Suprafata: ");
scanf("%d", &s->surf);
printf("- Pret: ");
scanf("%d", &s->price);
d = inQueue(s);
if(d == 0)
{
return -2;
}
} else {
p->right = NULL;
}
}
return 1;
}
int createStack(void)
{
Marfa *p, *s;
int d, f;
root = NULL;
top = NULL;
printf("\nDoriti sa creati un arbore(radacina)? (1/0): ");
scanf("%d", &f);
if(f == 0)
{
puts("Arborele nu a fost creat.");
return 0;
}
p = (Marfa*)malloc(sizeof(*p));
if(p == NULL)
{
return -1;
}
puts("Memoria a fost alocata cu succes!");
puts("\nDati informatia pentru radacina: ");
puts("___________________________________");
printf("- Denumire: ");
fflush(stdin);
gets(p->name);
printf("- Proprietar: ");
fflush(stdin);
gets(p->owner);
printf("- Tip: ");
fflush(stdin);
6
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
gets(p->type);
printf("- Adresa: ");
fflush(stdin);
gets(p->addr);
printf("- Suprafata: ");
scanf("%d", &p->surf);
printf("- Pret: ");
scanf("%d", &p->price);
d = push(p);
if(d == 0)
{
return -2;
}
root = p;
while(top!=NULL)
{
p = pop();
printf("Doriti sa creati copilul drept al nodului %s? (1/0): ", p->name);
scanf("%d", &f);
if(f!=0)
{
s = (Marfa*)malloc(sizeof(*s));
if(s == NULL)
{
return -3;
}
p->right = s;
puts("\nDati informatia pentru nod:");
puts("______________________________");
printf("- Denumire: ");
fflush(stdin);
gets(s->name);
printf("- Proprietar: ");
fflush(stdin);
gets(s->owner);
printf("- Tip: ");
fflush(stdin);
gets(s->type);
printf("- Adresa: ");
fflush(stdin);
gets(s->addr);
printf("- Suprafata: ");
scanf("%d", &s->surf);
printf("- Pret: ");
scanf("%d", &s->price);
d = push(s);
if(d == 0)
{
return -2;
}
} else {
7
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
p->right = NULL;
}
printf("\nDoriti sa creati copilul sting al nodului %s? (1/0): ", p->name);
scanf("%d", &f);
if(f!=0)
{
s = (Marfa*)malloc(sizeof(*s));
if(s == NULL)
{
return -3;
}
p->left = s;
puts("\nDati informatia pentru nod:");
puts("______________________________");
printf("- Denumire: ");
fflush(stdin);
gets(s->name);
printf("- Proprietar: ");
fflush(stdin);
gets(s->owner);
printf("- Tip: ");
fflush(stdin);
gets(s->type);
printf("- Adresa: ");
fflush(stdin);
gets(s->addr);
printf("- Suprafata: ");
scanf("%d", &s->surf);
printf("- Pret: ");
scanf("%d", &s->price);
d = push(s);
if(d == 0)
{
return -2;
}
} else {
p->left = NULL;
}
}
return 1;
}
int createRecursion(void)
{
Marfa *s;
int f;
printf("(1/0): ");
scanf("%d", &f);
if(f == 0)
{
return NULL;
}
8
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
s = (Marfa*)malloc(sizeof(*s));
if(s == NULL)
{
printf("Memoria nu a fost alocata!\n");
exit(1);
}
puts("\nDati informatia pentru nod: ");
puts("______________________________");
printf("- Denumire: ");
fflush(stdin);
gets(s->name);
printf("- Proprietar: ");
fflush(stdin);
gets(s->owner);
printf("- Tip: ");
fflush(stdin);
gets(s->type);
printf("- Adresa: ");
fflush(stdin);
gets(s->addr);
printf("- Suprafata: ");
scanf("%d", &s->surf);
printf("- Pret: ");
scanf("%d", &s->price);
printf("\n- Dati fiul sting al tatalui %s ", s->name);
s->left = createRecursion();
printf("\n- Dati fiul drept al tatalui %s ", s->name);
s->right = createRecursion();
return s;
}
int show_treeQueue(void)
{
Marfa *p, *s;
int d;
first = last = NULL;
p = root;
d = inQueue(p);
if(d == 0)
{
return -2;
}
puts("\nInformatia despre noduri:");
puts("___________________________________________");
while(first!=NULL)
{
p = delQueue();
printf("- Denumire: %s\n", p->name);
printf("- Proprietar: %s\n", p->owner);
printf("- Tip: %s\n", p->type);
printf("- Adresa: %s\n", p->addr);
printf("- Suprafata: %d\n", p->surf);
9
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
printf("- Pret: %d\n", p->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", p, p->left, p->right);
puts("___________________________________________");
s = p->left;
if(s)
{
d = inQueue(s);
if(d == 0)
{
return -2;
}
}
s = p->right;
if(s)
{
d = inQueue(s);
if(d == 0)
{
return -2;
}
}
}
return 1;
}
int show_treeStack(void)
{
Marfa *p, *s;
int d;
top = NULL;
p = root;
d = push(p);
if(d == 0)
{
return -2;
}
puts("\nInformatii despre nod:");
puts("___________________________________________");
while(top!=NULL)
{
p = pop();
printf("- Denumire: %s\n", p->name);
printf("- Proprietar: %s\n", p->owner);
printf("- Tip: %s\n", p->type);
printf("- Adresa: %s\n", p->addr);
printf("- Suprafata: %d\n", p->surf);
printf("- Pret: %d\n", p->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", p, p->left, p->right);
puts("___________________________________________");
s = p->right;
if(s)
{
10
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
d = push(s);
if(d == 0)
{
return -2;
}
}
s = p->left;
if(s)
{
d = push(s);
if(d == 0)
{
return -2;
}
}
}
return 1;
}
int inQueue(Marfa *v)
{
ElQueue *t;
t = (ElQueue*)calloc(1,sizeof(*t));
if(t == NULL) return 0;
t->adr = v;
t->next = NULL;
if(first == NULL)
{
first = t;
} else {
last->next = t;
}
last = t;
return 1;
}
Marfa *delQueue(void)
{
ElQueue *t;
Marfa *v;
t = first;
v = t->adr;
if(t == last)
{
first = last = NULL;
} else {
first = t->next;
}
free(t);
return v;
}
int push(Marfa *v)
{
11
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
ElStack *t;
t = (ElStack*)calloc(1,sizeof(*t));
if(t == NULL)
{
return 0;
}
t->adr = v;
t->prev = top;
top = t;
return 1;
}
Marfa *search_treeQueue(char *v)
{
Marfa *p, *s;
int d;
first = last = NULL;
p = root;
d = inQueue(p);
if(d == 0)
{
return NULL;
}
while(first!=NULL)
{
p = delQueue();
if(stricmp(p->name, v)==0)
{
return p;
}
s = p->left;
if(s)
{
d = inQueue(s);
if(d == 0)
{
return NULL;
}
}
s = p->right;
if(s)
{
d = inQueue(s);
if(d == 0)
{
return NULL;
}
}
}
return NULL;
}
Marfa *search_treeStack(char *v)
12
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
{
Marfa *p, *s;
top = NULL;
int d;
d = push(root);
if(d == 0)
{
return NULL;
}
while(top!=NULL)
{
p = pop();
if(stricmp(p->name, v)==0)
{
return p;
}
s = p->left;
if(s!=NULL)
{
push(s);
}
s = p->right;
if(s!=NULL)
{
push(s);
}
}
return NULL;
}
Marfa *search_treeRecursion(Marfa *c, char *nume)
{
Marfa *temp = NULL;
if(c == NULL)
{
return NULL;
}
if(strcmp(c->name, nume)==0)
{
return c;
}
temp = search_treeRecursion(c->left, nume);
if(temp)
{
return temp;
}
temp = search_treeRecursion(c->right, nume);
if(temp)
{
return temp;
}
return NULL;
13
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
}
void modify_information(Marfa *c)
{
int f;
printf("Doriti sa modificati denumirea imobilului? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati denumirea imobilului: ");
fflush(stdin);
gets(c->name);
}
printf("Doriti sa modificati proprietarul imobilului? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati proprietarul: ");
fflush(stdin);
gets(c->owner);
}
printf("Doriti sa modificati tipul imobilului? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati tipul: ");
fflush(stdin);
gets(c->type);
}
printf("Doriti sa modificati adresa imobilului? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati adresa: ");
fflush(stdin);
gets(c->addr);
}
printf("Doriti sa modificati suprafata imobilului? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati suprafata: ");
scanf("%d", &c->surf);
}
printf("Doriti sa modificati pretul imobilului? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati pretul: ");
scanf("%d", &c->price);
}
return;
14
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
}
int size_treeQueue(void)
{
Marfa *p, *s;
int d;
int n = 0;
first = last = NULL;
p = root;
d = inQueue(p);
if(d == 0)
{
return -2;
}
while(first!=NULL)
{
p = delQueue();
n++;
s = p->left;
if(s)
{
d = inQueue(s);
if(d == 0)
{
return -2;
}
}
s = p->right;
if(s)
{
d = inQueue(s);
if(d == 0)
{
return -2;
}
}
}
return n;
}
int size_treeStack(void)
{
Marfa *p, *s;
int d;
int n = 0;
top = NULL;
p = root;
d = push(p);
if(d == 0)
{
return -2;
}
while(top!=NULL)
15
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
{
p = pop();
n++;
s = p->right;
if(s)
{
d = push(s);
if(d == 0)
{
return -2;
}
}
s = p->left;
if(s)
{
d = push(s);
if(d == 0)
{
return -2;
}
}
}
return n;
}
int size_treeRecursion(Marfa *c)
{
if(c == NULL)
{
return;
}
return 1 + size_treeRecursion(c->left) + size_treeRecursion(c->right);
}
int height_tree(Marfa *c)
{
if(c)
{
int h_left = height_tree(c->left);
int h_right = height_tree(c->right);
int n = 1;
if(h_left > h_right)
{
n = h_left;
} else {
n = h_right;
}
n++;
return n;
// return 1 + height_treeQueue(c->left) + height_treeQueue(c->right);
} else {
return 0;
}
16
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
}
int free_mem_treeQueue(void)
{
Marfa* p, *s;
int d;
first = last = NULL;
p = root;
d = inQueue(p);
if(d == 0)
{
return -2;
}
while(first!=NULL)
{
p = delQueue();
s = p->left;
if(s)
{
d = inQueue(s);
if(d == 0)
{
return -2;
}
}
s = p->right;
if(s)
{
d = inQueue(s);
if(d == 0)
{
return -2;
}
}
free(p);
}
return 1;
}
int free_mem_treeStack(void)
{
Marfa *p, *s;
int d;
top = NULL;
p = root;
d = push(p);
if(d == 0)
{
return -2;
}
while(top!=NULL)
{
p = pop();
17
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
s = p->right;
if(s)
{
d = push(s);
if(d == 0)
{
return -2;
}
}
s = p->left;
if(s)
{
d = push(s);
if(d == 0)
{
return -2;
}
}
free(p);
}
return 1;
}
int free_mem_treeRecusion(Marfa *c)
{
if(c)
{
free_mem_treeRecusion(c->left);
free_mem_treeRecusion(c->right);
free(c);
c = NULL;
}
}
void RDS(Marfa *c)
{
if(c == NULL)
{
return;
}
puts("___________________________________________");
printf("- Denumire: %s\n", c->name);
printf("- Proprietar: %s\n", c->owner);
printf("- Tip: %s\n", c->type);
printf("- Adresa: %s\n", c->addr);
printf("- Suprafata: %d\n", c->surf);
printf("- Pret: %d\n", c->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", c, c->left, c->right);
puts("___________________________________________");
RDS(c->right);
RDS(c->left);
}
void RSD(Marfa *c)
18
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
{
if(c == NULL)
{
return;
}
puts("___________________________________________");
printf("- Denumire: %s\n", c->name);
printf("- Proprietar: %s\n", c->owner);
printf("- Tip: %s\n", c->type);
printf("- Adresa: %s\n", c->addr);
printf("- Suprafata: %d\n", c->surf);
printf("- Pret: %d\n", c->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", c, c->left, c->right);
puts("___________________________________________");
RSD(c->left);
RSD(c->right);
}
void SRD(Marfa *c)
{
if(c == NULL)
{
return;
}
SRD(c->left);
puts("___________________________________________");
printf("- Denumire: %s\n", c->name);
printf("- Proprietar: %s\n", c->owner);
printf("- Tip: %s\n", c->type);
printf("- Adresa: %s\n", c->addr);
printf("- Suprafata: %d\n", c->surf);
printf("- Pret: %d\n", c->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", c, c->left, c->right);
puts("___________________________________________");
SRD(c->right);
}
void DRS(Marfa *c)
{
if(c == NULL)
{
return;
}
DSR(c->right);
puts("___________________________________________");
printf("- Denumire: %s\n", c->name);
printf("- Proprietar: %s\n", c->owner);
printf("- Tip: %s\n", c->type);
printf("- Adresa: %s\n", c->addr);
printf("- Suprafata: %d\n", c->surf);
printf("- Pret: %d\n", c->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", c, c->left, c->right);
puts("___________________________________________");
19
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
DSR(c->left);
}
void SDR(Marfa *c)
{
if(c == NULL)
{
return;
}
SDR(c->left);
SDR(c->right);
puts("___________________________________________");
printf("- Denumire: %s\n", c->name);
printf("- Proprietar: %s\n", c->owner);
printf("- Tip: %s\n", c->type);
printf("- Adresa: %s\n", c->addr);
printf("- Suprafata: %d\n", c->surf);
printf("- Pret: %d\n", c->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", c, c->left, c->right);
puts("___________________________________________");
}
void DSR(Marfa *c)
{
if(c == NULL)
{
return;
}
DSR(c->right);
DSR(c->left);
puts("___________________________________________");
printf("- Denumire: %s\n", c->name);
printf("- Proprietar: %s\n", c->owner);
printf("- Tip: %s\n", c->type);
printf("- Adresa: %s\n", c->addr);
printf("- Suprafata: %d\n", c->surf);
printf("- Pret: %d\n", c->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", c, c->left, c->right);
puts("___________________________________________");
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "functii.c"
20
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
int main()
{
Marfa *p = NULL;
int f, height;
char num[40];
int op;
for(;;)
{
system("cls");
puts("|
===================================================================
===|");
puts("| MENIU(coada): |");
puts("|
===================================================================
===|");
puts("| 1. Crearea nodurilor arborelui binar oarecare in memoria dinamica... |");
puts("| 2. Afisarea informatiei despre nodurile arborelui la ecran. |");
puts("| 3. Cautarea nodului in arbore. |");
puts("| 4. Modificarea informatiei unui nod din arbore. |");
puts("| 5. Determinarea numarului de noduri. |");
puts("| 6. Determinarea inaltimii arborelui. |");
puts("| 7. Eliberarea memoriei alocate pentru arbore. |");
puts("| 0. Iesirea din program. |");
puts("|
===================================================================
===|\n");
puts("|
===================================================================
===|");
puts("| MENIU(stiva): |");
puts("|
===================================================================
===|");
puts("| 8. Crearea nodurilor arborelui binar oarecare in memoria dinamica... |");
puts("| 9. Afisarea informatiei despre nodurile arborelui la ecran. |");
puts("| 10. Cautarea nodului in arbore. |");
puts("| 11. Modificarea informatiei unui nod din arbore. |");
puts("| 12. Determinarea numarului de noduri. |");
puts("| 13. Determinarea inaltimii arborelui. |");
puts("| 14. Eliberarea memoriei alocate pentru arbore. |");
puts("| 15. Iesirea din program. |");
puts("|
===================================================================
===|\n");
puts("|
===================================================================
===|");
puts("| MENIU(Recursie): |");
puts("|
21
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
===================================================================
===|");
puts("| 16. Crearea nodurilor arborelui binar oarecare in memoria dinamica...|");
puts("| 17. Cautarea nodului in arbore. |");
puts("| 18. Modificarea informatiei unui nod din arbore. |");
puts("| 19. Determinarea numarului de noduri. |");
puts("| 20. Determinarea inaltimii arborelui. |");
puts("| 21. Eliberarea memoriei alocate pentru arbore. |");
puts("| 22. Iesirea din program. |");
puts("|
===================================================================
===|\n");
puts("|=============================|");
puts("| 23)RDS |");
puts("| 24)RSD |");
puts("| 25)SRD |");
puts("| 26)DRS |");
puts("| 27)SDR |");
puts("| 28)DSR |");
puts("|=============================|");
printf("\nAlegeti optiunea meniului: ");
scanf("%d", &op);
switch(op)
{
case 1:
f = createQueue();
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 2:
f = show_treeQueue();
if(f == 0)
{
puts("Memoria nu a fost alocata.");
exit(1);
}
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 3:
printf("Dati numele imobilului ce doriti sa-l cautati: ");
fflush(stdin);
gets(num);
p = search_treeQueue(num);
if(p == NULL)
{
puts("Nodul nu a fost gasit.");
} else {
puts("\nInformatii despre nod:");
puts("_____________________________");
printf("- Denumire: %s\n", p->name);
22
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
printf("- Proprietar: %s\n", p->owner);
printf("- Tip: %s\n", p->type);
printf("- Adresa: %s\n", p->addr);
printf("- Suprafata: %d\n", p->surf);
printf("- Pret: %d\n", p->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", p, p->left, p->right);
}
puts("\nPentru a continua apasati orice tasta...");
getch();
break;
case 4:
printf("Dati numele imobilului informatia caruia doriti sa o modificati: ");
fflush(stdin);
gets(num);
p = search_treeQueue(num);
if(p == NULL)
{
puts("Nu exista asa nod in arbore, incercati din nou!");
} else {
puts("\nInformatii despre nod:");
puts("________________________________");
printf("- Denumire: %s\n", p->name);
printf("- Proprietar: %s\n", p->owner);
printf("- Tip: %s\n", p->type);
printf("- Adresa: %s\n", p->addr);
printf("- Suprafata: %d\n", p->surf);
printf("- Pret: %d\n", p->price);
printf("- Nodul: %x; Left: %x, Right: %x\n\n", p, p->left, p->right);
modify_information(p);
}
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 5:
f = size_treeQueue();
if(f == 0)
{
puts("Memoria nu a fost alocata!");
} else {
printf("Numarul de noduri este: %d\n", f);
}
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 6:
height = height_tree(root);
printf("Inaltimea arborelui este de %d NIVELE.\n", height);
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 7:
23
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
free_mem_treeQueue();
puts("Memoria a fost eliberata cu succes!");
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 0:
puts("\nProgramul a fost inchis cu succes.");
return 0;
exit(1);
case 8:
f = createStack();
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 9:
f = show_treeStack();
if(f == 0)
{
puts("Memoria nu a fost alocata.");
exit(1);
}
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 10:
printf("Dati numele marfei ce doriti sa cautati: ");
fflush(stdin);
gets(num);
p = search_treeStack(num);
if(p == NULL)
{
puts("Nodul nu a fost gasit.");
} else {
puts("\nInformatii despre nod:");
puts("___________________________________________");
printf("- Denumire: %s\n", p->name);
printf("- Proprietar: %s\n", p->owner);
printf("- Tip: %s\n", p->type);
printf("- Adresa: %s\n", p->addr);
printf("- Suprafata: %d\n", p->surf);
printf("- Pret: %d\n", p->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", p, p->left, p->right);
}
puts("\nPentru a continua apasati orice tasta...");
getch();
break;
case 11:
printf("Dati numele imobilului informatia caruia doriti sa o modificati: ");
fflush(stdin);
gets(num);
p = search_treeStack(num);
24
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
if(p == NULL)
{
puts("Nu exista asa nod in arbore, incercati din nou!");
} else {
puts("Informatii despre nod:");
puts("__________________________________");
printf("- Denumire: %s\n", p->name);
printf("- Proprietar: %s\n", p->owner);
printf("- Tip: %s\n", p->type);
printf("- Adresa: %s\n", p->addr);
printf("- Suprafata: %d\n", p->surf);
printf("- Pret: %d\n", p->price);
printf("- Nodul: %x; Left: %x, Right: %x\n\n", p, p->left, p->right);
modify_information(p);
}
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 12:
f = size_treeStack();
if(f == 0)
{
puts("Memoria nu a fost alocata!");
} else {
printf("Numarul de noduri este: %d\n", f);
}
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 13:
height = height_tree(root);
printf("Inaltimea arborelui este de %d NIVELE.\n", height);
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 14:
free_mem_treeStack();
puts("Memoria a fost eliberata cu succes!");
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 15:
puts("\nProgramul a fost inchis cu succes.");
return 0;
exit(1);
case 16:
f = createRecursion();
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 17:
25
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
printf("Dati numele imobilului ce doriti sa-l cautati: ");
fflush(stdin);
gets(num);
p = search_treeRecursion(root, num);
if(p == NULL)
{
puts("Nodul nu a fost gasit.");
} else {
puts("\nInformatii despre nod:");
puts("________________________________________________");
printf("- Denumire: %s\n", p->name);
printf("- Proprietar: %s\n", p->owner);
printf("- Tip: %s\n", p->type);
printf("- Adresa: %s\n", p->addr);
printf("- Suprafata: %d\n", p->surf);
printf("- Pret: %d\n", p->price);
printf("- Nodul: %x; Left: %x, Right: %x\n", p, p->left, p->right);
puts("________________________________________________");
}
puts("\nPentru a continua apasati orice tasta...");
getch();
break;
case 18:
printf("Dati numele imobilului informatia caruia doriti sa o modificati: ");
fflush(stdin);
gets(num);
p = search_treeRecursion(root, num);
if(p == NULL)
{
puts("Nu exista asa nod in arbore, incercati din nou!");
} else {
puts("\nInformatii despre nod:");
puts("________________________________________________");
printf("- Denumire: %s\n", p->name);
printf("- Proprietar: %s\n", p->owner);
printf("- Tip: %s\n", p->type);
printf("- Adresa: %s\n", p->addr);
printf("- Suprafata: %d\n", p->surf);
printf("- Pret: %d\n", p->price);
printf("- Nodul: %x; Left: %x, Right: %x\n\n", p, p->left, p->right);
puts("________________________________________________");
modify_information(p);
}
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 19:
f = size_treeRecursion(root);
if(f == 0)
{
puts("Memoria nu a fost alocata!");
26
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
} else {
printf("Numarul de noduri este: %d\n", f);
}
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 20:
height = height_tree(root);
printf("Inaltimea arborelui este de %d NIVELE.\n", height);
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 21:
f = free_mem_treeRecusion(root);
puts("Memoria a fost eliberata cu succes!");
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 22:
puts("\nProgramul a fost inchis cu succes.");
return 0;
exit(1);
case 23:
RDS(root);
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 24:
RSD(root);
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 25:
SRD(root);
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 26:
DRS(root);
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 27:
SDR(root);
puts("Pentru a continua apasati orice tasta...");
getch();
break;
case 28:
DSR(root);
puts("Pentru a continua apasati orice tasta...");
getch();
27
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
break;
default:
puts("Ati ales o optiune incorecta, incercati din nou.");
puts("Pentru a continua apasati orice tasta...");
getch();
}
}
}
Rezultatele primite:
Meniul principal
Afișsarea datelor
Modificarea elementului
28
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
Stergerea elementului
Salvarea în fișier
Divizarea în 2 subliste
29
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.
Unirea a 2 subliste
Eliberarea memoriei
30
Structuri de date și algoritmi. Lucrare de laborator Nr.10/11
Tema: Implementarea tipului abstract de date „Arbore binar”. Utilizarea algoritmilor iterativi.