Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr.4&5
La Structuri de date si algoritmi
A efectuat:
st. gr. TI-15X Student Name
A verificat: M. Kulev
dr., conf.univ.,
Chișinău 2016
Lucrarea de laborator nr.4&5
Sarcina de lucru: De scris trei fișiere în limbajul C pentru implementarea (2 fisiere) si utilizarea
(1 fișier – program cu funcția main) a TDA “Arbore binar geniralizat ”
1. Fișierul antet cu extensia (h) care descrie structura nodului al arborelui binar (conform
variantei din lucrarea de laborator 1) și prototipurile funcțiilor care asigură operațiunile de
prelucrare a arborelui binar. Pentru lucrare de laborator 4 în acest fișier trebuie de adaugat
descrierea structurilor elementelor cozei și a stivei unde vor fi stocate adresele nodurilor ale
arborelui binar precum și prototipurile funcțiilor de inserare și eliminare a elimentului pentru
coada și stiva respectiv.
2. Fisier cu extensia (cpp sau c) care conține codurile (implementările) tuturor funcțiilor
declarate în fișierul antet.
1
În lucrare de laborator 5 funcția de afișare a informaței despre nodurile arborelui pe ecran,
precum și a adreselor nodului current, copilului sting și copilului drept al acestora trebuie
impementată pentru toate parcurgerile recursive posibile ale arborelui binar.
Varianta 10: Stat
Noţiuni teoretice
În informatica, un arbore binar este un arbore în care fiecare nod are cel mult doi succesori (fii).
De obicei, succesorii se numesc „nodul stânga” și „nodul dreapta”. Arborii binari sunt folosiți
mai ales drept arbori binari de căutare sau și la structurile de date de tip heap.
o fiecare nod are 0,1 sau 2 succesori;
o fiecare nod are un singur predecesor, cu exceptia radacinii care nu are niciunul;
o succesorii fiecarui nod sunt ordonati(fiul sting, fiul drept, daca este unul singur trebuie de
mentionat care;
Prin parcurgerea unui arbore se intelege examinarea in mod sistematic a nodurilor sale astfel
incat fiecare nod sa fie atins o singura data.Aceasta actiune este numita si "vizitare" a varfurilor
arborelui,scopul ei fiind de a stationa in fiecare varf pentru a efectua o prelucrare a informatiei
asociata varfului respectiv.Arborele este o structura neliniara de organizare a datelor,iar rolul
traversarii sale este tocmai conceperea unei aranjari liniare a nodurilor in vederea trecerii de la
unul la altul,fructificand avantajul acestei organizari
Parcurgerea arborilor
Preordine Inordine
Se parcurge rădăcina Se parcurge subarborele stâng
Se parcurge subarborele stâng Se parcurge rădăcina
Se parcurge subarborele drept Se parcurge subarborele drept
Postordine
Se parcurge subarborele stâng
Se parcurge subarborele drept
Se parcurge rădăcina
Implementare:
typedef struct arbore{
int info;
struct nod *left, *right;
2
}arbore;
Analiza datelor:
Functia main
a) date intermediare:
optiune – variabilă simplă de tip întreg, opțiunea aleasă de utilizator;
t - variabilă locala de tip pointer la nod care reprezinta adresa elementului cautat;
fname - variabila de tip pointer la char,denumirea fisierului pentru introducere
nod* delq(void);
Functia pentru eliminarea unui element din coada astfel obtinindui adresa lui.
Parametri nu sunt;
Date returnabile
x – pointer de tip nod (arbore), elementul șters;
Variabile locale
c – pointer de tip coadă, adresa în care se stochează elementul ce urmează să fie șters;
nod *pop(void);
Functia pentru eliminarea unui element din stiva astfel obtinindui adresa lui.
Parametri nu sunt;
Date returnabile
x– pointer de tip nod, elementul șters;
Variabile locale
c – pointer de tip stivă, adresa în care se stochează elementul ce urmează să fie șters;
int show_q(void);
Functia pentru afisarea liste de elemente cu ajutorul cozii in latime
Parametri nu sunt;
Date returnabile
functia returneaza 1 daca elementele au fost gasite,0 daca lista este vida
Variabile locale
p,c – pointer de tip nod, variabile pentru prelucrarea listei;
3
int show_s(void);
Functia pentru afisarea liste de elemente cu ajutorul stivei in adincime
Parametri nu sunt;
Date returnabile
functia returneaza 1 daca elementele au fost gasite,0 daca lista este vida
Variabile locale
p,c – pointer de tip nod, variabile pentru prelucrarea listei;
int size_q(void);
Functia pentru afisarea la ecran la marimii arborelui cu ajutorul cozii
Parametri nu sunt;
Date returnabile
n – variabilă simplă de tip întreg, mărimea arborelui;
Variabile locale
c,p – pointeri de tip nod, variabile pentru prelucrarea listei;
4
Date returnabile nu sunt
Variabile locale nu sunt
int size_s(void);
Functia pentru afisarea la ecran la marimii arborelui cu ajutorul stivei
Parametri nu sunt;
Date returnabile
s – variabilă simplă de tip întreg, mărimea arborelui;
Variabile locale
c,p – pointeri de tip nod, variabile pentru prelucrarea listei;
int creat_q(void);
Functia pentru crearea arborelui cu ajutorul cozii.
Parametri nu sunt;
Date returnabile returneaza 1 daca elementul a fost creat cu succes,0 invers;
Variabile locale
f – variabilă simplă de tip întreg, răspunsul utilizatorului.
c,p – pointeri de tip carte(arbore), variabile pentru prelucrarea listei;
int creat_s(void);
Functia pentru crearea arborelui cu ajutorul stivei.
Parametri nu sunt;
Date returnabile returneaza 1 daca elementul a fost creat cu succes,0 invers;
Variabile locale
f – variabilă simplă de tip întreg, răspunsul utilizatorului.
c,p – pointeri de tip carte(arbore), variabile pentru prelucrarea listei;
int freemem_s(void);
Functia pentru eliberarea memoriei
Parametri nu sunt;
Date returnabile returneaza 1 daca elementul a fost creat cu succes,0 invers
Variabile locale
5
c,p – pointeri de tip carte(arbore), variabile pentru prelucrarea listei
int freemem_q(void);
Functia pentru eliberarea memoriei
Parametri nu sunt;
Date returnabile returneaza 1 daca elementul a fost creat cu succes,0 invers
Variabile locale
c,p – pointeri de tip carte(arbore), variabile pentru prelucrarea listei;
6
Date returnabile nu sunt;
Variabile locale nu sunt;
7
int freemem_q();
int freemem_s();
int height_rsd(nod *c);
Fișierul functions.h:
#include "stat.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int inq(nod *x){
elq *c;
c=(elq*)malloc(sizeof(elq));
if(!c) return 0;
if(!first){
first = c;
} else {
last->next=c;
}
last=c;
c->next=NULL;
c->adrnod=x;
return 1;
}
nod* delq(){
elq *c=first;
nod *x;
if(c == last){
first=last=NULL;
} else {
first=c->next;
}
x=c->adrnod;
free(c);
return x;
}
nod* pop(){
els *c=top;
nod *x;
top=c->prev;
x=c->adrnod;
free(c);
8
return x;
}
int creat_q(){
int f;
nod *c,*p;
first=last=NULL;
printf(" Doriti sa creati radacina arborelui (1/0)?: ");
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
if(!c) return -1;
printf(" Introduceti datele radacinei:\n");
printf(" Nume: ");
scanf("%s",&c->nume);
printf(" Capitala: ");
scanf("%s",&c->capitala);
printf(" Presedinte: ");
scanf("%s",&c->presedinte);
printf(" Populatia: ");
scanf("%d",&c->populatia);
printf(" Suprafata: ");
scanf("%d",&c->suprafata);
if(!inq(c)) return -2;
root = c;
}else {
root = NULL;
}
while(first){
p = delq();
printf(" Doriti sa creati copilul sting al nodului %s (1/0)?: ",p->nume);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
if(!c) return -3;
printf(" Introduceti datele copilului sting\n");
printf(" Nume: ");
scanf("%s",&c->nume);
printf(" Capitala: ");
scanf("%s",&c->capitala);
printf(" Presedinte: ");
scanf("%s",&c->presedinte);
printf(" Populatia: ");
scanf("%d",&c->populatia);
printf(" Suprafata: ");
scanf("%d",&c->suprafata);
p->left=c;
if(!inq(c)) return -2;
} else {
p->left=NULL;
}
printf(" Doriti sa creati copilul drept al nodului %s (1/0)?: ",p->nume);
9
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
if(!c) return -3;
printf(" Introduceti datele copilului drept\n");
printf(" Nume: ");
scanf("%s",&c->nume);
printf(" Capitala: ");
scanf("%s",&c->capitala);
printf(" Presedinte: ");
scanf("%s",&c->presedinte);
printf(" Populatia: ");
scanf("%d",&c->populatia);
printf(" Suprafata: ");
scanf("%d",&c->suprafata);
p->right = c;
if(!inq(c)) return -2;
} else {
p->right = NULL;
}
}
return 1;
}
int show_q(){
nod *p,*c;
first=last=NULL;
if(!root) return 0;
p=root;
if(!inq(p)) return -2;
printf(" Lista nodurilor\n\n");
while(first){
p=delq();
printf(" ---Nodul %s---\n",p->nume);
printf(" Nume: %s\n",p->nume);
printf(" Capitala: %s\n",p->capitala);
printf(" Presedinte: %s\n",p->presedinte);
printf(" Populatia: %d\n",p->populatia);
printf(" Suprafata: %d\n\n",p->suprafata);
c=p->left;
if(c){
if(!inq(c)) return -2;
}
c=p->right;
if(c){
if(!inq(c)) return -2;
}
}
return 1;
}
nod* search_q(char *fname){
nod *p,*c;
10
first=last=NULL;
if(!root) return NULL;
p=root;
if(!inq(p)) return NULL;
while(first){
p=delq();
if(!strcmp(p->nume,fname)) return p;
c=p->left;
if(c){
if(!inq(c)) return NULL;
}
c=p->right;
if(c){
if(!inq(c)) return NULL;
}
}
return NULL;
}
int size_q(){
int s=0;
nod *p,*c;
first=last=NULL;
if(!root) return 0;
p=root;
if(!inq(p)) return -2;
while(first){
p=delq();
s++;
c=p->left;
if(c){
if(!inq(c)) return -2;
}
c=p->right;
if(c){
if(!inq(c)) return -2;
}
}
return s;
}
int freemem_q(){
nod *p,*c;
first=last=NULL;
if(!root) return 0;
p=root;
if(!inq(p)) return -2;
while(first){
p=delq();
c=p->left;
if(c){
11
if(!inq(c)) return -2;
}
c=p->right;
if(c){
if(!inq(c)) return -2;
}
free(p);
}
return 1;
}
int height_q(nod *c){
int l=0,r=0;
if(!c) return -1;
l=1+height_q(c->left);
r=1+height_q(c->right);
if(l>r) return l;
else return r;
}
int creat_s(){
nod *p, *c;
int f;
root=NULL;
top=NULL;
printf(" Doriti sa creati radacina arborelui (1/0)? : ");
fflush(stdin);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
if(!c) return -1;
printf(" Introduceti datele \n");
printf(" Nume: ");
scanf("%s",&c->nume);
printf(" Capitala: ");
scanf("%s",&c->capitala);
printf(" Presedinte: ");
scanf("%s",&c->presedinte);
printf(" Populatia: ");
scanf("%d",&c->populatia);
printf(" Suprafata: ");
scanf("%d",&c->suprafata);
if(!push(c)) return -5;
root=c;
while(top){
p=pop();
printf(" Doriti sa creati copilul drept al nodului %s (1/0)?: ",p->nume);
fflush(stdin);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
if(!c) return -3;
printf(" Introduceti datele\n");
12
printf(" Nume: ");
scanf("%s",&c->nume);
printf(" Capitala: ");
scanf("%s",&c->capitala);
printf(" Presedinte: ");
scanf("%s",&c->presedinte);
printf(" Populatia: ");
scanf("%d",&c->populatia);
printf(" Suprafata: ");
scanf("%d",&c->suprafata);
p->right = c;
if(!push(c)) return -5;
} else {
p->right = NULL;
}
printf(" Doriti sa creati copilul sting al nodului %s (1/0)?: ",p->nume);
fflush(stdin);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
if(!c) return -3;
printf(" Introduceti datele\n");
printf(" Nume: ");
scanf("%s",&c->nume);
printf(" Capitala: ");
scanf("%s",&c->capitala);
printf(" Presedinte: ");
scanf("%s",&c->presedinte);
printf(" Populatia: ");
scanf("%d",&c->populatia);
printf(" Suprafata: ");
scanf("%d",&c->suprafata);
p->left=c;
if(!push(c)) return -5;
} else {
p->left=NULL;
}
}
}
return 1;
}
int show_s(){
nod *p,*c;
top=NULL;
if(!root) return 0;
p=root;
if(!push(p)) return -5;
printf("Lista nodurilor\n\n");
while(top){
p=pop();
printf(" ---Nodul %s---\n",p->nume);
13
printf(" Nume: %s\n",p->nume);
printf(" Capitala: %s\n",p->capitala);
printf(" Presedinte: %s\n",p->presedinte);
printf(" Populatia: %d\n",p->populatia);
printf(" Suprafata: %d\n\n",p->suprafata);
c=p->right;
if(c!=NULL){
if(!push(c)) return -5;
}
c=p->left;
if(c!=NULL){
if(!push(c)) return -5;
}
}
printf("\n");
return 1;
}
int size_s(){
nod *p,*c;
int s=0;
top=NULL;
if(!root) return 0;
p=root;
if(!push(p)) return -5;
while(top){
p=pop(); s++;
c=p->right;
if(c!=NULL){
if(!push(c)) return -5;
}
c=p->left;
if(c!=NULL){
if(!push(c)) return -5;
}
}
return s;
}
14
c=p->left;
if(c!=NULL){
if(!push(c)) return NULL;
}
}
return NULL;
}
int freemem_s(){
nod *p,*c;
top=NULL;
if(!root) return 0;
p=root;
if(!push(p)) return -5;
while(top){
p=pop();
c=p->right;
if(c!=NULL){
if(!push(c)) return -5;
}
c=p->left;
if(c!=NULL){
if(!push(c)) return -5;
}
free(p);
}
return 1;
}
int height_s(nod *c){
int l=0,r=0;
if(!c) return -1;
l=1+height_s(c->left);
r=1+height_s(c->right);
if(l>r) return l;
else return r;
}
15
printf(" Populatia: ");
scanf("%d",&c->populatia);
printf(" Suprafata: ");
scanf("%d",&c->suprafata);
printf(" Doriti sa creati copilul sting al nodului %s (1/0)?: ",c->nume);
fflush(stdin);
scanf("%d",&f);
if(f){
c->left=creat_rsd2(c);
} else {
c->left=NULL;
}
printf(" Doriti sa creati copilul drept al nodului %s (1/0)?: ",c->nume);
fflush(stdin);
scanf("%d",&f);
if(f){
c->right=creat_rsd(c);
} else {
c->right=NULL;
}
return c;
}
void show_rsd(nod *c){
if(!c){
return;
}
printf(" ---Nodul %s---\n",c->nume);
printf(" Nume: %s\n",c->nume);
printf(" Capitala: %s\n",c->capitala);
printf(" Presedinte: %s\n",c->presedinte);
printf(" Populatia: %d\n",c->populatia);
printf(" Suprafata: %d\n\n",c->suprafata);
show_rsd(c->left);
show_rsd(c->right);
}
void show_rds(nod *c){
if(!c){
return;
}
printf(" ---Nodul %s---\n",c->nume);
printf(" Nume: %s\n",c->nume);
printf(" Capitala: %s\n",c->capitala);
printf(" Presedinte: %s\n",c->presedinte);
printf(" Populatia: %d\n",c->populatia);
printf(" Suprafata: %d\n\n",c->suprafata);
show_rds(c->right);
show_rds(c->left);
}
void show_srd(nod *c){
if(!c){
return;
}
16
show_srd(c->left);
printf(" ---Nodul %s---\n",c->nume);
printf(" Nume: %s\n",c->nume);
printf(" Capitala: %s\n",c->capitala);
printf(" Presedinte: %s\n",c->presedinte);
printf(" Populatia: %d\n",c->populatia);
printf(" Suprafata: %d\n\n",c->suprafata);
show_srd(c->right);
}
void show_drs(nod *c){
if(!c){
return;
}
show_drs(c->right);
printf(" ---Nodul %s---\n",c->nume);
printf(" Nume: %s\n",c->nume);
printf(" Capitala: %s\n",c->capitala);
printf(" Presedinte: %s\n",c->presedinte);
printf(" Populatia: %d\n",c->populatia);
printf(" Suprafata: %d\n\n",c->suprafata);
show_drs(c->left);
}
void show_sdr(nod *c){
if(!c){
return;
}
show_sdr(c->left);
show_sdr(c->right);
printf(" ---Nodul %s---\n",c->nume);
printf(" Nume: %s\n",c->nume);
printf(" Capitala: %s\n",c->capitala);
printf(" Presedinte: %s\n",c->presedinte);
printf(" Populatia: %d\n",c->populatia);
printf(" Suprafata: %d\n\n",c->suprafata);
}
17
freemem_rsd(c->right);
free(c);
}
Fisierul main.c:
#include "functions.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
nod *t=NULL;
char fname[100];
int optiune=0;
do{
system("CLS");
printf("\
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n\
º PRELUCRAREA ARBORELUI UTILIZIND COADA º\n\
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͺ\n\
º 1. Crearea arborelui º\n\
º 2. Afisarea arborelui º\n\
º 3. Cautarea unui nod º\n\
º 4. Marimea arborelui º\n\
º 5. Inaltimea arborelui º\n\
º 6. Eliberarea memoriei º\n\
18
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͺ\n\
º PRELUCRAREA ARBORELUI UTILIZIND STIVA º\n\
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͺ\n\
º 7. Crearea arborelui º\n\
º 8. Afisarea arborelui º\n\
º 9. Cautarea unui nod º\n\
º 10. Marimea arberelui º\n\
º 11. Inaltimea arberelui º\n\
º 12. Eliberarea memoriei º\n\
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͺ\n\
º PRELUCAREA ARBORELUI FOLOSIND RECURSIVITATEA º\n\
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͺ\n\
º 13. Crearea RSD º\n\
º 14. Afisarea RSD º\n\
º 15. Afisarea RDS º\n\
º 16. Afisarea SRD º\n\
º 17. Afisarea DRS º\n\
º 18. Afisarea SDR º\n\
º 19. Afisarea DSR º\n\
º 20. Marimea arborelui º\n\
º 21. Inaltimea arborelui º\n\
º 22. Cautarea unui nod º\n\
º 23. Eliberarea memoriei º\n\
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͺ\n\
º IESIRE DIN PROGRAM º\n\
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͺ\n\
º 0. Iesire. º\n\
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n",185);
printf("\n Alegeti optiunea: ");
scanf("%d",&optiune);
switch (optiune){
case 1: {
creat_q();
system("PAUSE");
break;
}
case 2: {
show_q();
system("PAUSE");
break;
}
case 3: {
printf(" Introduceti numele de cautat: ");
fflush(stdin);
scanf("%s",&fname);
t=search_q(fname);
if(t){
printf(" ---Nodul %s---\n",t->nume);
printf(" Nume: %s\n",t->nume);
printf(" Capitala: %s\n",t->capitala);
printf(" Presedinte: %s\n",t->presedinte);
printf(" Populatia: %d\n",t->populatia);
19
printf(" Suprafata: %d\n",t->suprafata);
} else {
printf(" Nu exista asa nume!\n");}
system("PAUSE");
break;
}
case 4: {
printf(" Nodurile arborelui = %d\n",size_q());
system("PAUSE");
break;
}
case 5: {
printf(" Inaltimea arborelui este %d \n", height_q(root));
system("PAUSE");
break;
}
case 6: {
freemem_q(root);
root=NULL;
printf(" Eliberarea memoriei a avut loc cu succes!\n");
system("PAUSE");
break;
}
case 7: {
creat_s();
system("PAUSE");
break;
}
case 8: {
show_s();
system("PAUSE");
break;
}
case 9: {
printf(" Introduceti numele de cautat: ");
fflush(stdin);
scanf("%s",&fname);
t=search_s(fname);
if(t){
printf(" ---Nodul %s---\n",t->nume);
printf(" Nume: %s\n",t->nume);
printf(" Capitala: %s\n",t->capitala);
printf(" Presedinte: %s\n",t->presedinte);
printf(" Populatia: %d\n",t->populatia);
printf(" Suprafata: %d\n",t->suprafata);
} else {
printf(" Nu exista asa nume!\n");}
system("PAUSE");
break;
}
case 10: {
printf(" Nodurile arborelui = %d\n",size_s());
20
system("PAUSE");
break;
}
case 11: {
printf(" Inaltimea arborelui este %d \n", height_s(root));
system("PAUSE");
break;
}
case 12: {
freemem_s(root);
root=NULL;
printf(" Eliberarea memoriei a avut loc cu succes!\n");
system("PAUSE");
break;
}
case 13: {
creat_rsd(NULL);
system("PAUSE");
break;
}
case 14: {
show_rsd(root);
system("PAUSE");
break;
}
case 15: {
show_rds(root);
system("PAUSE");
break;
}
case 16: {
show_srd(root);
system("PAUSE");
break;
}
case 17: {
show_drs(root);
system("PAUSE");
break;
}
case 18: {
show_sdr(root);
system("PAUSE");
break;
}
case 19: {
show_dsr(root);
system("PAUSE");
break;
}
case 20: {
printf(" Nodurile arborelui = %d\n",size_rsd(root));
21
system("PAUSE");
break;
}
case 21: {
printf(" Inaltimea arborelui este %d \n", height_rsd(root));
system("PAUSE");
break;
}
case 22: {
printf(" Introduceti numele de cautat: ");
fflush(stdin);
scanf("%s",&fname);
t=search_rsd(root,fname);
if(t){
printf(" ---Nodul %s---\n",t->nume);
printf(" Nume: %s\n",t->nume);
printf(" Capitala: %s\n",t->capitala);
printf(" Presedinte: %s\n",t->presedinte);
printf(" Populatia: %d\n",t->populatia);
printf(" Suprafata: %d\n",t->suprafata);
} else {
printf(" Nu exista asa nume!\n");}
system("PAUSE");
break;
}
case 23: {
freemem_rsd(root);
root=NULL;
printf(" Eliberarea memoriei a avut loc cu succes!\n");
system("PAUSE");
break;
}
case 0:{
printf(" Daca doriti sa iesiti tastati ENTER\n");
return 0;
}
default:{
printf(" Optiunea nu exista!\n");
break;
}
}
}
while(optiune!=0);
getch();
return 0;
}
22
Screen Shot-uri:
Menu
23
Afisarea
24
Marimea arborelui
Inaltimea arborelui
25
Eliberaraea memoriei
Afisarea
26
Marimea arborelui
Inaltimea arborelui
27
Eliberarea memoriei
28
Afisarea RSD
29
Afisarea RDS
30
Afisarea SRD
31
Afisarea DRS
32
Afisarea SDR
33
Afisarea DSR
Marimea arborelui
34
Inaltimea arborelui
Eliberarea memoriei
Concluzii:
În urma efectuării acestui laborator, am elaborat un program de prelucrare a unui arbore
binar și am însușit modul de modul de repartizare a codului în fișiere, ceea ce permite ca codul să
fie mai ușor de citit și redactat. Am elaborat un meniu prin care utilizatorul poate comunica cu
programul elaborat și am implementat cele mai utile funcții de prelucrare a arborelui binar.
Bibliografie:
35