
Funzioni Main ABR
By:
mittimus on
Jul 16th, 2012 | syntax:
C | size: 1.91 KB | hits: 19 | expires: Never
void insord(list *l, tipobaseList x){
position p,u;
tipobaseList tmp;
if (EmptyList(*l)) InsertList(l,First(*l),x);
else {
p=First(*l);
u=End(*l);
while (p!=u) {
tmp=Retrieve(*l,p);
if (ConfrontaList(tmp,x)<0) p=Next(*l,p);
else break;
}
InsertList(l,p,x);
}
}
void inserimento_autore(list *l,tipobaseList a){
position p;
abr q;
if(!EmptyList(*l)) p=Locate(*l,a);
if(EmptyList(*l) || p==End(*l)){
MakeNullABR(&q);
AggiornaABR(&a,q);
insord(l,a);
} else printf("\nL'autore inserito e' gia' presente");
}
void inserimento_opera(list *l,tipobaseList a){
position p;
tipobaseABR libro;
abr q;
if(!EmptyList(*l)) p=Locate(*l,a);
if(EmptyList(*l) || p==End(*l)) {
printf("\nL'autore NON esiste, verra' prima inserito ");
LeggiElementoABR(&libro);
MakeNullABR(&q);
InsertABR(&q,libro);
AggiornaABR(&a,q);
insord(l,a);
} else {
a=Retrieve(*l,p);
LeggiElementoABR(&libro);
CopiaABR(&q,a);
if(Member(q,libro))
printf("\nLibro gia' presente in archivio");
else{
InsertABR(&q,libro);
AggiornaABR(&a,q);
DeleteList(l,p);
InsertList(l,p,a);
}
}
}
/*funzione che cerca un elemento in un ABR e */
/*visualizza il contenuto di un nodo, se lo trova */
void cerca_libro(abr n, tipobaseABR lb){
tipobaseABR tmp;
if (EmptyABR(n)) printf("\nLibro non trovato in archivio ");
else {
tmp=Label(n);
if (!ConfrontaABR(tmp,lb))
if(LibroPresente(tmp)) VisualizzaElementoABR(tmp);
else printf("\nIl Libro %s e' attualmente in prestito");
else if (ConfrontaABR(tmp,lb)>0) cerca_libro(LeftChild(n),lb);
else cerca_libro(RightChild(n),lb);
}
}
void ricerca_opera(list l, tipobaseList a){
tipobaseABR libro;
position p;
abr q;
if(!EmptyList(l)) p=Locate(l,a);
if(EmptyList(l) || p==End(l))
printf("\nL'autore inserito non esiste");
else{
a=Retrieve(l,p);
CopiaABR(&q,a);
if(EmptyABR(q))
printf("\nNon ci sono libri relativi a questo autore");
else {
CercaElementoABR(&libro);
cerca_libro(q,libro);
}
}
}