+ All Categories
Home > Documents > Laborator4-5 SDA

Laborator4-5 SDA

Date post: 24-Jan-2016
Category:
Upload: ruslanmitu
View: 29 times
Download: 3 times
Share this document with a friend
Description:
Laboratorul 4,5 la SDA
35
Ministerul Educaţiei 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
Transcript
Page 1: Laborator4-5 SDA

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

Catedra Informatica Aplicată

RAPORTLucrarea 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

Chişinău -2015

Page 2: Laborator4-5 SDA

Lucrare de laborator Nr.4-5Tema: Implementarea tipului de date abstract “Arbore binar” in limbajul C. Algoritmi iterativi si algoritmi recursivi.

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 lucrării:Noțiunea de arbore:Un arbore reprezintă o structură de date ce modelează o ierarhie de elemente.Astfel, fiecare element, numit nod, poate deţine un număr de unul sau mai mulţi descendenţi, iar în acest caz nodul este numit părinte al nodurilor descendente.Fiecare nod poate avea un singur nod părinte.Un nod fără descendenţi este un nod terminal, sau nod frunză.În schimb, există un singur nod fără părinte, iar acesta este întotdeauna rădăcina arborelui.Un arbore binar este un caz special de arbore, în care fiecare nod poate avea maxim doi descendenţi:nodul stângnodul drept.În funcţie de elementele ce pot fi reprezentate în noduri şi de restricţiile aplicate arborelui, se pot crea structuri de date cu proprietăţi deosebite: heap-uri, arbori AVL, arbori roşu-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 utilizări comune a arborilor binari, şi anume pentru a reprezenta şi evalua expresii logice.

Page 3: Laborator4-5 SDA

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;

Page 4: Laborator4-5 SDA

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:

Page 5: Laborator4-5 SDA

Textul (codul) programului in limbajul „C”: struct.htypedef 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 coadahotel *delq(void);//strergerea din coadaint push(hotel *v);//inserarea in stivahotel *pop(void);//stergerea din stiva//LAB4int createl(void);//crearea in latimeint createa(void);//crearea in adincimeint showl(void);//afisarea in latimeint showa(void);//afisarea in adincimeint 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);//LAB5hotel* createRSD(void);hotel* createRDS(void);

Page 6: Laborator4-5 SDA

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 coadaint 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 coadahotel* delq(void){ elq *c; hotel *v; c=first;

Page 7: Laborator4-5 SDA

v=c->adr; if(first==last) first=last=NULL; else first=c->next; free(c); return v;}//F. pentru inserarea in stivaint 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 stivahotel* pop(void){ els *c; hotel *v; c=top; v=c->adr; top=c->prev; free(c); return v;}//F. pentru crearea arborelui in latimeint 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);

Page 8: Laborator4-5 SDA

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));

Page 9: Laborator4-5 SDA

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 adincimeint 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($): ");

Page 10: Laborator4-5 SDA

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);

Page 11: Laborator4-5 SDA

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 latimeint 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 adincimeint showa(void)

Page 12: Laborator4-5 SDA

{ 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 latimeint 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;

Page 13: Laborator4-5 SDA

}//F. pentru determinarea marimii arborelui,in adincimeint 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 latimehotel *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 adincimehotel *searcha(char *v){ hotel *p,*s;int l;

Page 14: Laborator4-5 SDA

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 latimeint 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 adincimeint freemema(void){ hotel *p,*s;int l; top=NULL; if(root==NULL)return -1 ; p=root; l=push(p); if(!l)return -2;

Page 15: Laborator4-5 SDA

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 latimeint 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 latimeint 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

Page 16: Laborator4-5 SDA

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);

Page 17: Laborator4-5 SDA

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);

Page 18: Laborator4-5 SDA

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;

Page 19: Laborator4-5 SDA

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();}

Page 20: Laborator4-5 SDA

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");

Page 21: Laborator4-5 SDA

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:");

Page 22: Laborator4-5 SDA

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");

Page 23: Laborator4-5 SDA

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>>");

Page 24: Laborator4-5 SDA

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:

Page 25: Laborator4-5 SDA

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();

Page 26: Laborator4-5 SDA

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:

Page 27: Laborator4-5 SDA

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. Chișinău: UTM, 2015.


Recommended