1. Definizione di Albero



Scaricare 142.5 Kb.
Pagina11/11
21.12.2019
Dimensione del file142.5 Kb.
1   2   3   4   5   6   7   8   9   10   11

5.1.File abr.h

#include


#define ALBEROVUOTO NULL
#define STR 15
typedef struct {

char cognome[STR], nome[STR];

unsigned short eta;

} tipobaseABR;


typedef short boolean;
typedef struct nodoABR {

tipobaseABR info;

struct nodoABR * leftchild , * rightchild;

} * abr;
void LeggiStringa(char s[],unsigned short dim){

unsigned short i;

for (i=0; (s[i]=getchar())!='\n' && i

s[i]='\0';

}
void LeggiElemento(tipobaseABR * x){

printf("\nInserisci l'Elemento ");

printf("\nInserisci il Cognome ");

LeggiStringa(x->cognome, STR);

printf("\nInserisci il Nome ");

LeggiStringa(x->nome, STR);

printf("\nInserisci l'eta' ");

scanf("%d",&x->eta);

flush();


}
void CercaElemento(tipobaseABR * x){

printf("\nRicerca per Cognome e Nome ");

printf("\nInserisci il Cognome ");

LeggiStringa(x->cognome, STR);

printf("\nInserisci il Nome ");

LeggiStringa(x->nome, STR);

}
void VisualizzaElemento(tipobaseABR x){

printf("\n\nElemento ");

printf("\nCognome = %s ", x.cognome);

printf("\nNome = %s ", x.nome);

printf("\nEta' = %d \n\n",x.eta);

}
int Confronta(tipobaseABR a, tipobaseABR b){

if (!strcmp(a.cognome,b.cognome))

return strcmp(a.nome,b.nome);

else return strcmp(a.cognome,b.cognome);

}
boolean EmptyABR(abr n){

return(n==ALBEROVUOTO);

}
boolean FullABR(abr n){

return(0);

}
abr LeftChild(abr n){

return(n->leftchild);

}
abr RightChild(abr n){

return(n->rightchild);

}
tipobaseABR Label(abr n){

return(n->info);

}
void MakeNullABR(abr *p){

*p=ALBEROVUOTO;

}
boolean Member(abr n, tipobaseABR x){

if (EmptyABR(n)) return(0);

if (!Confronta(n->info,x)) return(1);

if (Confronta(n->info,x)>0) return(Member(n->leftchild,x));

else return(Member(n->rightchild,x));

}
void InsertABR(abr *p, tipobaseABR x){

if (!FullABR(*p)){

if (EmptyABR(*p)) {

*p=(struct nodoABR *)malloc(sizeof(struct nodoABR));

(*p)->info=x;

(*p)->leftchild=(*p)->rightchild=ALBEROVUOTO;

} else if (Confronta((*p)->info,x)>0) InsertABR(&(*p)->leftchild,x);

else if (Confronta((*p)->info,x)<0) InsertABR(&(*p)->rightchild,x);

}

}
abr DelMin(abr *p){



abr pmin;

if ((*p)->leftchild==ALBEROVUOTO) {

pmin=*p;

*p=(*p)->rightchild;

return(pmin);

} else return(DelMin(&(*p)->leftchild));

}

void Delete(abr *p, tipobaseABR x){



abr tmp;

if (!EmptyABR(*p)) {

if (!Confronta((*p)->info,x)) {

tmp=*p;


if (EmptyABR((*p)->leftchild)) {

*p=(*p)->rightchild;

free (tmp);

} else if (EmptyABR((*p)->rightchild)) {

*p=(*p)->leftchild;

free (tmp);

} else {

*p=DelMin(&(*p)->rightchild);

(*p)->leftchild=tmp->leftchild;

(*p)->rightchild=tmp->rightchild;

free (tmp);

}

} else if (Confronta((*p)->info,x)>0) Delete(&(*p)->leftchild,x);



else Delete(&(*p)->rightchild,x);

}

}







Condividi con i tuoi amici:
1   2   3   4   5   6   7   8   9   10   11


©astratto.info 2019
invia messaggio

    Pagina principale