Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
AL REPUBLICII MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică şi Microelectronică
Paduraru Vadim
CR - 192
Raport
pentru lucrarea de laborator Nr.10/11
la cursul de “SDA
Теmа: I Implementarea tipului abstract de date
„Arbore binar”. Utilizarea algoritmilor iterativi
/ Implementarea tipului abstract de date
„Arbore binar”. Utilizarea algoritmilor
recursivi
Verificat:
M. Kulev
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 recursivă a
nodurilor arborelui, folosind algoritmi recursivi.
MAIN:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "imobil.h"
int main(){
int comand,m=1,m1=0,m2=0,m3=0;
nod *t=NULL;
char fname[10];
while(1){
fflush(stdin);
while(m)
m=0;
system("cls");
fflush(stdin);
printf("\t\tCrearea arborelui :\n");
printf("\t*******************************************\n");
printf("\t******************************************\n");
fflush(stdin);
scanf("%d",&comand);
system("cls");
switch(comand){
default:
m=1;
break;
break;
system("cls"); fflush(stdin);
printf(" 1. Coada\n");
printf(" 2. Stiva\n");
printf(" 3. Recursie\n");
printf(" 4. Meniul de introducere a datelor\n");
printf(" 0. Exit\n\n");
scanf("%d",&comand);
system("cls");
switch(comand){
break;
while(m1){
system("cls");
fflush(stdin);
printf("\t\t===========================================\n");
printf(" 0. Exit\n\n");
system("cls");
switch(comand){
case 1:
show_q(); break;
case 2:
fflush(stdin); scanf("%s",&fname);
t=search_q(fname);
if(t){
printf("======================================\n\n");
printf("Proprietarul %s\n",t->proprietarul);
printf("Tipul %s\n",t->Tipul);
printf("adresa %s\n",t->adresa);
printf("suprafata %s\n",t->suprafata);
printf("costul %d\n",t->costul );
} else {
} break;
case 3:
printf("%d\n", size_q());
break;
case 4:
break;
case 5:
freemem_q(); root=NULL;
break;
} pause;
printf("\t\t===========================================\n");
printf(" 0. Exit\n\n");
scanf("%d",&comand);
system("cls");
switch(comand){
case 1:
show_s(); break;
case 2:
fflush(stdin); scanf("%s",&fname);
t=search_s(fname);
if(t){
printf("======================================\n\n");
printf("Proprietarul %s\n",t->proprietarul);
printf("Tipul %s\n",t->Tipul);
printf("adresa %s\n",t->adresa);
printf("suprafata %s\n",t->suprafata);
printf("costul %d\n",t->costul );
} else {
} break;
case 3:
printf("%d\n", size_q());
break;
case 4:
break;
break;
} pause;
printf("\t\t===========================================\n");
printf(" 1. RSD\n");
printf(" 2. Cautarea nodului dupa denumirea Imobilului \n");
printf(" 7. SRD\n");
printf(" 8. SRD\n");
printf(" 9. RDS\n");
printf("10. DRS\n");
printf("11. DRS\n");
printf(" 0. Exit\n\n");
scanf("%d",&comand);
system("cls");
switch(comand){
case 0:
exit(0);
break;
case 1:
printf("RSD\n\n");
show_r(root); break;
case 2:
fflush(stdin); scanf("%s",&fname);
t=search_r(root,fname);
if(t){
printf("======================================\n\n");
printf("Proprietarul %s\n",t->proprietarul);
printf("Tipul %s\n",t->Tipul);
printf("adresa %s\n",t->adresa);
printf("suprafata %s\n",t->suprafata);
printf("costul %d\n",t->costul );
} else {
} break;
case 3:
printf("%d\n", size_q());
break;
case 4:
break;
case 5:
freemem_r(root); root=NULL;
break;
case 7:
printf("SRD\n\n");
show_SRD(root);
break;
case 8:
printf("SDR\n\n");
show_SDR(root);
break;
case 9:
printf("RDS\n\n");
show_RDS(root); break;
show_DRS(root); break;
show_DSR(root); break;
} pause;
return 0;
Functii.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "imobil.h"
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=v;
return 1;
nod* delq(){
elq *c=first;
nod *v;
if(c == last){
first=last=NULL;
} else {
first=c->next;
v=c->adrnod;
free(c);
return v;
els *c;
c=(els*)malloc(sizeof(els));
if(!c) return 0;
c->prev=top;
c->adrnod=v;
top=c;
return 1;
nod* pop(){
els *c=top;
nod *v;
top=c->prev;
v=c->adrnod;
free(c);
return v;
int creat_q(){
int f;
nod *c,*p;
first=last=NULL;
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
root = c;
while(first){
p = delq();
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
p->left=c;
} else {
p->left=NULL;
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
p->right = c;
} else {
p->right = NULL;
return 1;
//Afisarea in coada
int show_q(){
nod *p,*c;
first=last=NULL;
if(!root) return 0;
p=root;
if(!inq(p)) return -2;
printf("Lista Disciplinelor\n\n");
while(first){
p=delq();
printf("==================================================\n\n");
printf("Proprietarul %s\n",p->proprietarul);
printf("Tipul %s\n",p->Tipul);
printf("adresa %s\n",p->adresa);
printf("suprafata %s\n",p->suprafata);
printf("costul %d\n",p->costul );
c=p->left;
if(c){
c=p->right;
if(c){
pause
return 1;
//cautarea in coada
first=last=NULL;
p=root;
while(first){
p=delq();
if(!strcmp(p->proprietarul,fname)) return p;
c=p->left;
if(c){
c=p->right;
if(c){
return NULL;
//marimea in coada
int size_q(){
int s=0;
nod *p,*c;
first=last=NULL;
if(!root) return 0;
p=root;
p=delq();
s++;
c=p->left;
if(c){
c=p->right;
if(c){
return s;
int freemem_q(){
nod *p,*c;
first=last=NULL;
if(!root) return 0;
p=root;
while(first){
p=delq();
c=p->left;
if(c){
}
c=p->right;
if(c){
free(p);
return 1;
int creat_s(){
int f;
root=NULL;
top=NULL;
fflush(stdin);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
while(top){
p=pop();
fflush(stdin);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
p->right = c;
} else {
p->right = NULL;
fflush(stdin);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
p->left=c;
} else {
p->left=NULL;
return 1;
//afisarea in stiva
int show_s(){
nod *p,*c;
top=NULL;
if(!root) return 0;
p=root;
printf("Lista Disciplinelor\n\n");
while(top){
p=pop();
printf("==================================================\n\n");
printf("Proprietarul %s\n",c->proprietarul);
printf("Tipul %s\n",c->Tipul);
printf("adresa %s\n",c->adresa);
printf("suprafata %s\n",c->suprafata);
printf("costul %d\n",c->costul );
c=p->right;
if(c!=NULL){
c=p->left;
if(c!=NULL){
pause
return 1;
//marimea in stiva
int size_s(){
nod *p,*c;
int s=0;
top=NULL;
if(!root) return 0;
p=root;
while(top){
p=pop(); s++;
c=p->right;
if(c!=NULL){
c=p->left;
if(c!=NULL){
return s;
//cautarea in stiva
nod *p,*c;
top=NULL;
p=root;
while(top){
p=pop();
if(!strcmp(fname,p->proprietarul)) return p;
c=p->right;
if(c!=NULL){
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;
while(top){
p=pop();
c=p->right;
if(c!=NULL){
c=p->left;
if(c!=NULL){
free(p);
return 1;
}
//crearea recursiv
int creat_r(){
int f;
root=NULL;
top=NULL;
fflush(stdin);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
root=c;
while(top){
p=pop();
fflush(stdin);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
if(!c) return -3;
p->right = c;
} else {
p->right = NULL;
fflush(stdin);
scanf("%d",&f);
if(f){
c=(nod*)malloc(sizeof(nod));
p->left=c;
} else {
p->left=NULL;
}
return 1;
//afisarea recursiv
if(!c){
return;
printf("==================================================\n\n");
printf("Proprietarul %s\n",c->proprietarul);
printf("Tipul %s\n",c->Tipul);
printf("adresa %s\n",c->adresa);
printf("suprafata %s\n",c->suprafata);
printf("costul %d\n",c->costul );
show_r(c->left);
show_r(c->right);
if(!c) return;
freemem_r(c->left);
freemem_r(c->right);
free(c);
//cautarea recursiv
nod* t=NULL;
if (!strcmp(c->proprietarul,fname)) return c;
t=search_r(c->left,fname);
if (t) return t;
t=search_r(c->right,fname);
if (t) return t;
return NULL;
//marimea recursiv
if(!c) return n;
n++;
size_r(c->left);
size_r(c->right);
return n;
//inaltimea arborelui
int l,r;
if(!c) return -1;
l=height_r(c->left);
r=height_r(c->right);
if(l>r)return(l+1);
else{return(r+1);
show_SRD(c->left);
printf("==================================================\n\n");
printf("Proprietarul %s\n",c->proprietarul);
printf("Tipul %s\n",c->Tipul);
printf("adresa %s\n",c->adresa);
printf("suprafata %s\n",c->suprafata);
printf("costul %d\n",c->costul );
show_SRD(c->right);
show_SDR(c->left);
show_SDR(c->right);
printf("==================================================\n\n");
printf("Proprietarul %s\n",c->proprietarul);
printf("Tipul %s\n",c->Tipul);
printf("adresa %s\n",c->adresa);
printf("suprafata %s\n",c->suprafata);
printf("costul %d\n",c->costul );
if(!c)
return;
printf("==================================================\n\n");
printf("Proprietarul %s\n",c->proprietarul);
printf("Tipul %s\n",c->Tipul);
printf("adresa %s\n",c->adresa);
printf("suprafata %s\n",c->suprafata);
printf("costul %d\n",c->costul );
show_RDS(c->right);
show_RDS(c->left);
if(!c)
{
return;
show_DRS(c->right);
printf("==================================================\n\n");
printf("Proprietarul %s\n",c->proprietarul);
printf("Tipul %s\n",c->Tipul);
printf("adresa %s\n",c->adresa);
printf("suprafata %s\n",c->suprafata);
printf("costul %d\n",c->costul );
show_DRS(c->left);
if(!c){
return; }
show_DSR(c->right);
show_DSR(c->left);
printf("==================================================\n\n");
printf("Proprietarul %s\n",c->proprietarul);
printf("Tipul %s\n",c->Tipul);
printf("adresa %s\n",c->adresa);
printf("suprafata %s\n",c->suprafata);
printf("costul %d\n",c->costul );
IMOBIL.H
//Arbore
char proprietarul[100];
char Tipul[100];
char adresa[100];
char suprafata[100];
int costul ;
}nod;
nod *root;
//Coada
nod *adrnod;
}elq;
elq *first;
elq *last;
//Stiva
typedef struct els{
nod *adrnod;
}els;
els *top;
//Prototipuri
nod* delq();
nod* pop();
int creat_q();
int creat_s();
int creat_r();
int show_q();
int show_s();
int size_q();
int size_s();
int freemem_q();
int freemem_s();
int height_r(nod *c);
Raspuns:
Concluzie: In aceasta lucrare de laborator am implimentat tipul
abstract de date ale “Arborelui Binar” si am utilizat algoritmele iterativi si
ale algoritmelor recursivi. Am obtinut deprinderile practice de
implementare si utilizare a tipului abstract de date.