Sunteți pe pagina 1din 27

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei

Catedra Informatica Aplicat

RAPORT
Lucrarea de laborator nr.4-5
la Structuri de date si algoritmi

A efectuat:
st. gr. TI-144

R. Mitu

A verificat:
dr., conf.univ., catedra IA

M. Kulev

Chiinu -2015

Lucrare de laborator Nr.4-5


Tema: Implementarea tipului de date abstract Arbore binar in
Algoritmi iterativi si algoritmi recursivi.

limbajul C.

Scopul lucrarii: Obtinerea deprinderilor practice de implementare in limbajul C


tipului de date abstract (TDA) Arbore binar utilizind algoritmi iterativi si
recursivi.
Sarcina: De scris trei fisiere in limbajul C pentru implementarea (2 fisiere) si
utilizarea (1 fisier program cu functia main ) a TDA Arbore binar.
Mersul lucrrii:
Noiunea de arbore:
Un arbore reprezint o structur de date ce modeleaz o ierarhie de elemente.
Astfel, fiecare element, numit nod, poate deine un numr de unul sau mai muli
descendeni, iar n acest caz nodul este numit printe al nodurilor descendente.
Fiecare nod poate avea un singur nod printe.
Un nod fr descendeni este un nod terminal, sau nod frunz.
n schimb, exist un singur nod fr printe, iar acesta este ntotdeauna rdcina
arborelui.
Un arbore binar este un caz special de arbore, n care fiecare nod poate avea
maxim doi descendeni:
nodul stng
nodul drept.
n funcie de elementele ce pot fi reprezentate n noduri i de restriciile aplicate
arborelui, se pot crea structuri de date cu proprieti deosebite: heap-uri, arbori
AVL, arbori rou-negru, arbori Splay i multe altele. O parte din aceste structuri
vor fi studiate la curs i n laboratoarele viitoare.
n acest laborator ne vom concentra asupra unei utilizri comune a arborilor binari,
i anume pentru a reprezenta i evalua expresii logice.

Analiza datelor:
Cimpurile structurii hotel:
numele - tablou de 30 de caractere in care se va pastra denumirea fiecarui hotel;
stele - variabila de tip float in care se va pastra numarul de stele a hotelului;
locuri - variabila de tip integer in care se va pastra numarul de locuri a hotelului;
anul - variabila de tip integer in care se va pastra anul hotelului;
pretul - variabila de tip float in care se va pastra pretul ($) pentru o zi;
left - pointer de tip struct hotel ce contine adresa copilului sting;
right - pointer de tip struct hotel ce contine adresa copilului drept;
Cimpurile structurii elq:
adr - pointer de tip hotel ce contine adresa elementului inclus in coada;
next - pointer de tip struct eql ce contine adresa urmatorului el. din coada;
Cimpurile structurii els:
adr - pointer de tip hotel ce contine adresa elementului inclus in stiva;
prev - pointer de tip struct els ce contine adresa urmatorului el. din stiva;
Variabile globale:
root - pointer de tip hotel ce contine adresa radacinii arborelui.
first - pointer de tip elq ce contine adresa primului element din coada.
last - pointer de tip elq ce contine adresa ultimului element din coada.
top - pointer de tip els ce contine adresa primului element din stiva.
Prototipurile functiilor:
Functiile de prelucrare a arborelui binar folosind algorimti iterativi:
int inq(hotel *v) - functia pentru inserarea unui el. in coada:
v - pointer de tip hotel ce contine adresa el. inserat in coada;
hotel *delq(void) - functia pentru stergerea unui el. din coada;
int push(hotel *v) - functia pentru inserarea unui el. in stiva:
v - pointer de tip hotel ce contine adresa el. inserat in stiva;
hotel *pop(void) functia pentru stergerea unui el. din stiva;
int createl(void) - functia pentru crearea arborelui in latime;
int createa(void) - functia pentru crearea arborelui in adincime;
int showl(void) functia pentru afisarea arborelui la ecran in latime;
int showa(void) functia pentru afisarea arborelui la ecran in adincime;
int sizel(void) functia pentru determinarea marimii arborelui in latime;
int sizea(void) functia pentru determinarea marimii arborelui in adincime;
hotel *searchl(char *v) functia pentru cautarea unui hotel dupa denumire in lat.:
v pointer de tip char ce contine adresa variabilei ce contine numele hotelului;

hotel *searcha(char *v) functia pentru cautarea unui hotel dupa denumire in ad.:
v pointer de tip char ce contine adresa variabilei ce contine numele hotelului;
int freememl(void) functia pentru eliberarea memoriei in latime;
int freemema(void) functia pentru eliberarea memoriei in adincime;
int heightl(void) functia pentru determinarea inatimii arborelui in latime;
int heighta(void) functia pentru determinarea inatimii arborelui in adincime;
Functiile de prelucrare a arborelui binar folosind algorimti recursivi:
hotel* createRSD(void) functia pentru creara arborelui RSD;
hotel* createRDS(void) functia pentru creara arborelui RDS;
void showRSD(hotel *c) functia pentru afisarea arborelui la ecran RSD:
c pointer de tip hotel ce contine adresa el. de la care sa inceapa afisarea.
void showRDS(hotel *c) functia pentru afisarea arborelui la ecran RDS;
void showSRD(hotel *c) functia pentru afisarea arborelui la ecran SRD;
void showDRS(hotel *c) functia pentru afisarea arborelui la ecran DRS;
void showSDR(hotel *c) functia pentru afisarea arborelui la ecran SDR;
void showDSR(hotel *c) functia pentru afisarea arborelui la ecran DSR;
hotel* searchRSD(hotel *c,int v) f. Pentru cautarea unui hotel dupa an RSD:
c - pointer de tip hotel ce contine adresa el. de la care sa inceapa cautarea;
v variabila de tip interg,anul hotelului de cautat;
hotel* searchRDS(hotel *c,int v) f. Pentru cautarea unui hotel dupa an RDS;
int sizeRSD(hotel *c) f. pentru determinarea marimii arborelui RSD:
c pointer de tip hotel ce contine ad. el. de la care sa inceapa sa masoare arb.;
int sizeRDS(hotel *c) f. pentru determinarea marimii arborelui RDS:
int heightRSD(hotel *c) f. pentru determinarea inaltimii arborelui RSD:
c pointer de tip hotel ce contine ad. el. de la care sa inceapa det. inaltimii;
int heightRDS(hotel *c) f. pentru determinarea inaltimii arborelui RDS;
void freememSDR(hotel *c) f. pentru eliberarea memoriei SDR:
c pointer de tip hotel ce contine ad. el. de la care sa inceapa eliberarea mem.;
void freememDSR(hotel *c) f. pentru eliberarea memoriei DSR:

Textul (codul) programului in limbajul C:


struct.h
typedef struct hotel{
int nr;
char numele[30];
float stele;
int locuri;
int anul;
int pretul;
struct hotel *left,*right;
}hotel;
hotel *root;
typedef struct elq{
hotel *adr;
struct elq *next;
}elq;
elq *first,*last;
typedef struct els{
hotel *adr;
struct els *prev;
}els;
els *top;
int inq(hotel *v);//inserarea in coada
hotel *delq(void);//strergerea din coada
int push(hotel *v);//inserarea in stiva
hotel *pop(void);//stergerea din stiva
//LAB4
int createl(void);//crearea in latime
int createa(void);//crearea in adincime
int showl(void);//afisarea in latime
int showa(void);//afisarea in adincime
int sizel(void);
int sizea(void);
hotel *searchl(char *v);
hotel *searcha(char *v);
int freememl(void);
int freemema(void);
int heightl(void);
int heighta(void);
//LAB5
hotel* createRSD(void);
hotel* createRDS(void);

void showRSD(hotel *c);


void showRDS(hotel *c);
void showSRD(hotel *c);
void showDRS(hotel *c);
void showSDR(hotel *c);
void showDSR(hotel *c);
hotel* searchRSD(hotel *c,int v);
hotel* searchRDS(hotel *c,int v);
int sizeRSD(hotel *c);
int sizeRDS(hotel *c);
int heightRSD(hotel *c);
int heightRDS(hotel *c);
void freememSDR(hotel *c);
void freememDSR(hotel *c);
functia.c
#include "antet1.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
//F.pentru inserarea in coada
int inq(hotel *v)
{
elq *c;
c=(elq*)malloc(sizeof(*c));
if(c==NULL)return 0;
c->adr=v;
if((first==last)&&(first==NULL))
first=last=c;
else
{
last->next=c;
c->next=NULL;
last=c;
}
return 1;
}
//F. pentru eliminarea din coada
hotel* delq(void)
{
elq *c; hotel *v;
c=first;

v=c->adr;
if(first==last)
first=last=NULL;
else first=c->next;
free(c);
return v;
}
//F. pentru inserarea in stiva
int push(hotel *v)
{
els *c;
c=(els*)malloc(sizeof(*c));
if(c==NULL)return 0;
c->adr=v;
c->prev=top;
top=c;
return 1;
}
//F. pentru eliminarea din stiva
hotel* pop(void)
{
els *c;
hotel *v;
c=top;
v=c->adr;
top=c->prev;
free(c);
return v;
}
//F. pentru crearea arborelui in latime
int createl(void)
{
hotel *p,*s;int f,l;
root=NULL;
first=last=NULL;
printf("Doriti sa creati un arbore?1/0");
scanf("%d",&f);
if(!f)return -1;
p=(hotel*)malloc(sizeof(*p));
if(p==NULL)return -2;
printf("Introduceti informatia necesara pentru radacina:\n");
printf("Nr. de ordine:");
scanf("%d",&p->nr);
printf("Numele: ");
scanf("%s",&p->numele);

printf("Nr. de stele: ");


scanf("%f",&p->stele);
printf("Nr. de locuri: ");
scanf("%d",&p->locuri);
printf("Anul: ");
scanf("%d",&p->anul);
printf("Pretul/zi($): ");
scanf("%d",&p->pretul);
root=p;
l=inq(p);
if(!l)return -3;
while(first)
{
p=delq();
printf("De creat copilul sting al nodului %d?(1/0)",p->nr);
scanf("%d",&f);
if(!f) p->left=NULL;
else
{
s=(hotel*)malloc(sizeof(*s));
if(s==NULL)return -4;
printf("Introduceti informatia necesara pentru copilul sting al nodului
%d:\n",p->nr);
printf("Nr. de ordine:");
scanf("%d",&s->nr);
printf("Numele: ");
scanf("%s",&s->numele);
printf("Nr. de stele: ");
scanf("%f",&s->stele);
printf("Nr. de locuri: ");
scanf("%d",&s->locuri);
printf("Anul: ");
scanf("%d",&s->anul);
printf("Pretul/zi($): ");
scanf("%d",&s->pretul);
p->left=s;
l=inq(s);
if(!l)return -5;
}
printf("De creat copilul drept al nodului %d?(1/0)",p->nr);
scanf("%d",&f);
if(!f) p->right=NULL;
else
{
s=(hotel*)malloc(sizeof(*s));

if(s==NULL)return -6;
printf("Introduceti informatia necesara pentru copilul drept al nodului
%d:\n",p->nr);
printf("Nr. de ordine:");
scanf("%d",&s->nr);
printf("Numele: ");
scanf("%s",&s->numele);
printf("Nr. de stele: ");
scanf("%f",&s->stele);
printf("Nr. de locuri: ");
scanf("%d",&s->locuri);
printf("Anul: ");
scanf("%d",&s->anul);
printf("Pretul/zi($): ");
scanf("%d",&s->pretul);
p->right=s;
l=inq(s);
if(!l)return -7;
}
}
return 0;
}
//F. pentru crearea arborelui in adincime
int createa(void)
{
hotel *p,*s;int f,l;
root=NULL;
top=NULL;
printf("Doriti sa creati un arbore?1/0");
scanf("%d",&f);
if(!f)return -1;
p=(hotel*)malloc(sizeof(*p));
if(p==NULL)return -2;
printf("Introduceti informatia necesara pentru radacina:\n");
printf("Nr. de ordine:");
scanf("%d",&p->nr);
printf("Numele: ");
scanf("%s",&p->numele);
printf("Nr. de stele: ");
scanf("%f",&p->stele);
printf("Nr. de locuri: ");
scanf("%d",&p->locuri);
printf("Anul: ");
scanf("%d",&p->anul);
printf("Pretul/zi($): ");

scanf("%d",&p->pretul);
root=p;
l=push(p);
if(!l)return -3;
while(top)
{
p=pop();
printf("De creat copilul sting al nodului %d?(1/0)",p->nr);
scanf("%d",&f);
if(!f) p->left=NULL;
else
{
s=(hotel*)malloc(sizeof(*s));
if(s==NULL)return -4;
printf("Introduceti informatia necesara pentru copilul sting al nodului
%d:\n",p->nr);
printf("Nr. de ordine:");
scanf("%d",&s->nr);
printf("Numele: ");
scanf("%s",&s->numele);
printf("Nr. de stele: ");
scanf("%f",&s->stele);
printf("Nr. de locuri: ");
scanf("%d",&s->locuri);
printf("Anul: ");
scanf("%d",&s->anul);
printf("Pretul/zi($): ");
scanf("%d",&s->pretul);
p->left=s;
l=push(s);
if(!l)return -5;
}
printf("De creat copilul drept al nodului %d?(1/0)");
scanf("%d",&f);
if(!f) p->right=NULL;
else
{
s=(hotel*)malloc(sizeof(*s));
if(s==NULL)return -6;
printf("Introduceti informatia necesara pentru copilul drept al nodului
%d:\n",p->nr);
printf("Nr. de ordine:");
scanf("%d",&s->nr);
printf("Numele: ");
scanf("%s",&s->numele);

printf("Nr. de stele: ");


scanf("%f",&s->stele);
printf("Nr. de locuri: ");
scanf("%d",&s->locuri);
printf("Anul: ");
scanf("%d",&s->anul);
printf("Pretul/zi($): ");
scanf("%d",&s->pretul);
p->right=s;
l=push(s);
if(!l)return -7;
}
}
return 0;
}
//F. pentru afisarea arborelui in latime
int showl(void)
{
hotel *p,*s;int l;
first=last=NULL;
if(root==NULL)return -1;
p=root;
l=inq(p);
if(!l)return -2;
while(first)
{
p=delq();
printf("****************************************\n\n");
printf("Datele hotelului:
%d\n",p->nr);
printf("Numele:
%s\n",p->numele);
printf("Nr. de stele:
%f\n",p->stele);
printf("Nr. de locuri:
%d\n",p->locuri);
printf("Anul:
%d\n",p->anul);
printf("Pretul:
%d\n",p->pretul);
s=p->left;
if(s){l=inq(s);
if(!l)return -3;}
s=p->right;
if(s){l=inq(s);
if(!l)return -4;}
}
return 0;
}
//F. pentru afisarea arboreluiin adincime
int showa(void)

{
hotel *p,*s;int l;
top=NULL;
if(root==NULL)return -1;
p=root;
l=push(p);
if(!l)return -2;
while(top)
{
p=pop();
printf("****************************************\n\n");
printf("Datele hotelului:
%d\n",p->nr);
printf("Numele:
%s\n",p->numele);
printf("Nr. de stele:
%f\n",p->stele);
printf("Nr. de locuri:
%d\n",p->locuri);
printf("Anul:
%d\n",p->anul);
printf("Pretul:
%d\n",p->pretul);
s=p->left;
if(s){l=push(s);
if(!l)return -3;}
s=p->right;
if(s){l=push(s);
if(!l)return -4;}
}
return 0;
}
//F. pentru determinarea marimii arborelui,in latime
int sizel(void)
{
hotel *p,*s;int n=0,l;
first=last=NULL;
if(root==NULL)return -1;
p=root;
l=inq(p);
if(!l)return -2;
while(first)
{
p=delq();
n++;
s=p->left;
if(s){l=inq(s);if(!l)return -3;}
s=p->right;
if(s){l=inq(s);if(!l)return -4;}
}
return n;

}
//F. pentru determinarea marimii arborelui,in adincime
int sizea(void)
{
hotel *p,*s;int n=0,l;
top=NULL;
if(root==NULL)return -1;
p=root;
l=push(p);
if(!l)return -2;
while(top)
{
p=pop();
n++;
s=p->left;
if(s){l=push(s);if(!l)return -3;}
s=p->right;
if(s){l=push(s);if(!l)return -4;}
}
return n;
}
//F. pentru cautarea unui element dupa denumire,in latime
hotel *searchl(char *v)
{
hotel *p,*s;int l;
first=last=NULL;
if(root==NULL)return NULL;
p=root;
l=inq(p);
if(!l)return NULL;
while (first)
{
p=delq();
if(stricmp(p->numele,v)==0)return p;
s=p->left;
if(s){l=inq(s);if(!l)return NULL;}
s=p->right;
if(s){l=inq(s);if(!l)return NULL;}
}
return 0;
}
//F. pentru cautarea unui element dupa denumire,in adincime
hotel *searcha(char *v)
{
hotel *p,*s;int l;

top=NULL;
if(root==NULL)return NULL;
p=root;
l=push(p);
if(!l)return NULL;
while (top)
{
p=pop();
if(stricmp(p->numele,v)==0)return p;
s=p->left;
if(s){l=push(s);if(!l)return NULL;}
s=p->right;
if(s){l=push(s);if(!l)return NULL;}
}
return 0;
}
//F. pentru eliberarea memoriei,in latime
int freememl(void)
{
hotel *p,*s;int l;
first=last=NULL;
if(root==NULL)return -1 ;
p=root;
l=inq(p);
if(!l)return -2;
while(first)
{
p=delq();
s=p->left;
if(s){l=inq(s);if(!l)return -3;}
s=p->right;
if(s){l=inq(s);if(!l)return -4;}
free(p);
}
return 0;
}
//F. pentru eliberarea memoriei,in adincime
int freemema(void)
{
hotel *p,*s;int l;
top=NULL;
if(root==NULL)return -1 ;
p=root;
l=push(p);
if(!l)return -2;

while(top)
{
p=pop();
s=p->left;
if(s){l=push(s);if(!l)return -3;}
s=p->right;
if(s){l=push(s);if(!l)return -4;}
free(p);
}
return 0;}
//F. pentru determinarea inaltimii arborelui,in latime
int heightl(void){
hotel *p,*s;int l,r,m;
r=m=0;
first=last=NULL;
if(root==NULL)return -1;
p=root;
l=inq(p);
if(!l)return -2;
while(first) {
p=delq();
s=p->left;
if(s){l=inq(s);if(!l){return -3;}r++;}
s=p->right;
if(s){l=inq(s);if(!l){return -4;}m++;}}
if(r>m)return r;
else return m;}
//F. pentru determinarea inaltimii arborelui,in latime
int heighta(void){
hotel *p,*s;int l,r,m;
r=m=0;
top=NULL;
if(root==NULL)return -1;
p=root;
l=push(p);
if(!l)return -2;
while(top)
{p=pop();
s=p->left;
if(s){l=push(s);if(!l){return -3;}r++;}
s=p->right;
if(s){l=push(s);if(!l){return -4;}m++;}}
if(r>m)return r;
else return m;}
//LAB5

hotel* createRSD(void){
hotel *c;
int f;
printf("Doriti sa creati un arbore?1/0");
scanf("%d",&f);
if(!f)return NULL;
c=(hotel*)malloc(sizeof(*c));
if(c==NULL){printf("Memoria nu a fost alocata"); exit(1);}
printf("Introduceti informatia necesara despre hotel:\n");
printf("Nr. de ordine:");
scanf("%d",&c->nr);
printf("Numele: ");
scanf("%s",&c->numele);
printf("Nr. de stele: ");
scanf("%f",&c->stele);
printf("Nr. de locuri: ");
scanf("%d",&c->locuri);
printf("Anul: ");
scanf("%d",&c->anul);
printf("Pretul/zi($): ");
scanf("%d",&c->pretul);
printf("Copilul sting al nodului %d",c->nr);
c->left=createRSD();
printf("Copilul drept al nodului %d",c->nr);
c->right=createRSD();
return c;
}
hotel* createRDS(void){
hotel *c;
int f;
printf("Doriti sa creati un arbore?1/0");
scanf("%d",&f);
if(!f)return NULL;
c=(hotel*)malloc(sizeof(*c));
if(c==NULL){printf("Memoria nu a fost alocata"); exit(1);}
printf("Introduceti informatia necesara despre hotel:\n");
printf("Nr. de ordine:");
scanf("%d",&c->nr);
printf("Numele: ");
scanf("%s",&c->numele);
printf("Nr. de stele: ");
scanf("%f",&c->stele);
printf("Nr. de locuri: ");
scanf("%d",&c->locuri);
printf("Anul: ");
scanf("%d",&c->anul);

printf("Pretul/zi($): ");
scanf("%d",&c->pretul);
printf("Copilul drept al nodului %d",c->nr);
c->right=createRDS();
printf("Copilul sting al nodului %d",c->nr);
c->left=createRDS();
return c;}
void showRSD(hotel *c){
if(c==NULL)return;
printf("Datele hotelului:
%d\n",c->nr);
printf("Numele:
%s\n",c->numele);
printf("Nr. de stele:
%f\n",c->stele);
printf("Nr. de locuri:
%d\n",c->locuri);
printf("Anul:
%d\n",c->anul);
printf("Pretul:
%d\n",c->pretul);
showRSD(c->left);
showRSD(c->right);}
void showRDS(hotel *c){
if(c==NULL)return;
printf("Datele hotelului:
%d\n",c->nr);
printf("Numele:
%s\n",c->numele);
printf("Nr. de stele:
%f\n",c->stele);
printf("Nr. de locuri:
%d\n",c->locuri);
printf("Anul:
%d\n",c->anul);
printf("Pretul:
%d\n",c->pretul);
showRSD(c->right);
showRSD(c->left);}
void showSRD(hotel *c){
if(c==NULL)return;
showSRD(c->left);
printf("Datele hotelului:
%d\n",c->nr);
printf("Numele:
%s\n",c->numele);
printf("Nr. de stele:
%f\n",c->stele);
printf("Nr. de locuri:
%d\n",c->locuri);
printf("Anul:
%d\n",c->anul);
printf("Pretul:
%d\n",c->pretul);
showSRD(c->right);}
void showDRS(hotel *c){
if(c==NULL)return;
showDRS(c->right);
printf("Datele hotelului:
%d\n",c->nr);
printf("Numele:
%s\n",c->numele);
printf("Nr. de stele:
%f\n",c->stele);
printf("Nr. de locuri:
%d\n",c->locuri);
printf("Anul:
%d\n",c->anul);

printf("Pretul:
%d\n",c->pretul);
showDRS(c->left);}
void showSDR(hotel *c){
if(c==NULL)return;
showSDR(c->left);
showSDR(c->right);
printf("Datele hotelului:
%d\n",c->nr);
printf("Numele:
%s\n",c->numele);
printf("Nr. de stele:
%f\n",c->stele);
printf("Nr. de locuri:
%d\n",c->locuri);
printf("Anul:
%d\n",c->anul);
printf("Pretul:
%d\n",c->pretul);}
void showDSR(hotel *c)
{
if(c==NULL)return;
showDSR(c->right);
showDSR(c->left);
printf("Datele hotelului:
%d\n",c->nr);
printf("Numele:
%s\n",c->numele);
printf("Nr. de stele:
%f\n",c->stele);
printf("Nr. de locuri:
%d\n",c->locuri);
printf("Anul:
%d\n",c->anul);
printf("Pretul:
%d\n",c->pretul);}
hotel* searchRSD(hotel *c,int v){
if(c==NULL)return c;
if(c->anul==v)return c;
c=searchRSD(c->left,v);
c=searchRSD(c->right,v);
return c;}
hotel* searchRDS(hotel *c,int v){
if(c==NULL)return c;
if(c->anul==v)return c;
c=searchRDS(c->right,v);
c=searchRDS(c->left,v);
return c;}
int sizeRSD(hotel *c){
int n;
if(c==NULL)return 0;
n=sizeRSD(c->left)+1;
n=sizeRSD(c->right)+1;
return n;}
int sizeRDS(hotel *c){
int n;
if(c==NULL)return 0;
n=sizeRDS(c->right)+1;

n=sizeRDS(c->left)+1;
return n;}
int heightRSD(hotel *c){
int l,r;
if(c==NULL)return -1;
l=heightRSD(c->left)+1;
r=heightRSD(c->right)+1;
if(r>l)return r; else return l;}
int heightRDS(hotel *c){
int l,r;
if(c==NULL)return -1;
l=heightRDS(c->right)+1;
r=heightRDS(c->left)+1;
if(r>l)return r; else return l;}
void freememSDR(hotel *c){
if(c==NULL)return;
freememSDR(c->left);
freememSDR(c->right);
free(c);
return;}
void freememDSR(hotel *c){
if(c==NULL)return;
freememDSR(c->right);
freememDSR(c->left);
free(c);
return;}
main.c
#include "functii.c"
//Main:
int main(){
hotel *p,*k;
int com,com1,com2,m,s,n;
char v[30];
printf("\tLaboratorul 4,5\n");
printf("\n1.Laboratorul 4");
printf("\n2.Laboratorul 5");
printf("\n\n0.Exit");
printf("\n\n\tAlegeti optiunea>>");
scanf("%d",&com);
switch(com)
{
case 0:
if(root){
freememl();
}

exit(0);
break;
case 1:
in:system("cls"); printf("\t\tMENU");
printf("\n\n1.Crearea arborelui in latime");
printf("\n2.Crearea arborelui in adincime");
printf("\n3.Afisarea arborelui in latime");
printf("\n4.Afisarea arborelui in adincime");
printf("\n5.Cautarea unui hotel in latime");
printf("\n6.Cautarea unui hotel in adincime");
printf("\n7.Inaltimea arborelui in latime");
printf("\n8.Inaltimea arborelui in adincime");
printf("\n9.Eliberarea memoriei in latime");
printf("\n10.Eliberarea memoriei in adincime");
printf("\n0.Exit");
printf("\n\n\tAlegeti optiunea>>");
scanf("%d",&com1);
switch(com1)
{
case 0:
if(root){
freememl();
}
exit(0);
break;
case 1:
if(!createl())
{
system("cls");
printf("Arborele a fost creat cu succes");
getch();
system("cls");
goto in;
}
else
{
printf("Eroare la crearea arborelui");
getch();
exit(0);
}
break;
case 2:
if(!createa())
{
system("cls");

printf("Arborele a fost creat cu succes");


getch();
system("cls");
goto in;
}
else
{
printf("Eroare la crearea arborelui");
getch();
exit(0);
}
break;
case 3:
system("cls");
if(!showl())
{
getch();
system("cls");
goto in;
}
else
{
printf("Eroare");
getch();
exit(0);
}
break;
case 4:
system("cls");
if(!showa())
{
getch();
system("cls");
goto in;
}
else
{
printf("Eroare");
getch();
exit(0);
}
break;
case 5:
system("cls");
printf("Introduceti denumirea hotelului:");

scanf("%s",&v);
p=searchl(v);
system("cls");
printf("Datele hotelului:
%d\n",p->nr);
printf("Numele:
%s\n",p->numele);
printf("Nr. de stele:
%f\n",p->stele);
printf("Nr. de locuri:
%d\n",p->locuri);
printf("Anul:
%d\n",p->anul);
printf("Pretul:
%d\n",p->pretul);
getch();
goto in;
break;
case 6:
system("cls");
printf("Introduceti denumirea hotelului:");
scanf("%s",&v);
p=searcha(v);
system("cls");
printf("Datele hotelului:
%d\n",p->nr);
printf("Numele:
%s\n",p->numele);
printf("Nr. de stele:
%f\n",p->stele);
printf("Nr. de locuri:
%d\n",p->locuri);
printf("Anul:
%d\n",p->anul);
printf("Pretul:
%d\n",p->pretul);
getch();
goto in;
break;
case 7:
system("cls");
m=heightl();
printf("Arborele dat are inaltimea:%d",m);
getch();
goto in;
break;
case 8:
system("cls");
m=heighta();
printf("Arborele dat are inaltimea:%d",m);
getch();
goto in;
break;
case 9:
if(!freememl())
{
printf("Eliberarea memoriei s-a efectuat cu succes");

getch();
goto in;
}
else
{
printf("Eroare");
getch();
exit(0);
}
break;
case 10:
if(!freemema())
{
printf("Eliberarea memoriei s-a efectuat cu succes");
getch();
goto in;
}
else
{
printf("Eroare");
getch();
exit(0);
}
break;
}
case 2:
an:system("cls"); printf("\t\tMENU");
printf("\n\n1.Crearea arborelui RSD");
printf("\n2.Crearea arborelui RDS");
printf("\n3.Afisarea arborelui RSD");
printf("\n4.Afisarea arborelui RDS");
printf("\n5.Afisarea arborelui SRD");
printf("\n6.Afisarea arborelui DRS");
printf("\n7.Afisarea arborelui SDR");
printf("\n8.Afisarea arborelui DSR");
printf("\n9.Cautarea unui hotel RSD");
printf("\n10.Cautarea unui hotel RDS");
printf("\n11.Marimea arborelui RSD");
printf("\n12.Marimea arborelui RDS");
printf("\n13.Inaltimea arborelui RSD");
printf("\n14.Inaltimea arborelui RDS");
printf("\n15.Eliberarea memoriei SDR");
printf("\n16.Eliberarea memoriei DSR");
printf("\n0.Exit");
printf("\n\n\tAlegeti optiunea>>");

scanf("%d",&com2);
switch(com2)
{
case 1:
root=createRSD();
goto an;
getch();
break;
case 2:
root=createRDS();
getch();
goto an;
break;
case 3:
system("cls");
showRSD(root);
getch();
goto an;
break;
case 4:
system("cls");
showRDS(root);
getch();
goto an;
break;
case 5:
system("cls");
showSRD(root);
getch();
goto an;
break;
case 6:
system("cls");
showDRS(root);
getch();
goto an;
break;
case 7:
system("cls");
showSDR(root);
getch();
goto an;
break;
case 8:

system("cls");
showDSR(root);
getch();
goto an;
break;
case 9:
system("cls");
printf("Introduceti anul pentru cautare:");
scanf("%d",&s);
k=searchRSD(root,s);
printf("Datele hotelului:
%d\n",k->nr);
printf("Numele:
%s\n",k->numele);
printf("Nr. de stele:
%f\n",k->stele);
printf("Nr. de locuri:
%d\n",k->locuri);
printf("Anul:
%d\n",k->anul);
printf("Pretul:
%d\n",k->pretul);
getch();
goto an;
break;
case 10:
system("cls");
printf("Introduceti anul pentru cautare:");
scanf("%d",&s);
k=searchRDS(root,s);
printf("Datele hotelului:
%d\n",k->nr);
printf("Numele:
%s\n",k->numele);
printf("Nr. de stele:
%f\n",k->stele);
printf("Nr. de locuri:
%d\n",k->locuri);
printf("Anul:
%d\n",k->anul);
printf("Pretul:
%d\n",k->pretul);
getch();
goto an;
break;
case 11:
system("cls");
n=sizeRSD(root);
printf("Marimea arborelui dat este:%d",n);
getch();
goto an;
break;
case 12:
system("cls");
n=sizeRDS(root);
printf("Marimea arborelui dat este:%d",n);
getch();

goto an;
break;
case 13:
system("cls");
n=heightRSD(root);
printf("Inaltimea arborelui dat este:%d",n);
getch();
goto an;
break;
case 14:
system("cls");
n=heightRDS(root);
printf("Inaltimea arborelui dat este:%d",n);
getch();
goto an;
break;
case 15:
system("cls");
freememSDR(root);
printf("Memoria s-a eliberat cu succes");
getch();
goto an;
break;
case 16:
system("cls");
freememDSR(root);
printf("Memoria s-a eliberat cu succes");
getch();
goto an;
break;
}

}
return 0;}
Datele introduse si rezultate obtinute:

Analiza datelor si Concluzii:


In cadrul acestei lucrari de laborator am insusit implementarea tipului abstract de
date arbore binar. Efectuand aceasta lucrare de laborator,am obtinut abilitatea de a
lucra cu arbori binari si abilitatea de a crea functiile de baza care gestioneaza o
baza de date.
Bibliografie:
1. Conspectul prelegirilor cursului Programarea Calculatoarelor. Lector dr.,
conf. univ. M.Kulev. Chiinu: UTM, 2015.