|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 58
|
[Linguaggio C] Aiuto interpretazione lista
Salve, studio ingegneria informatica e ho qualche problema ad interpretare il codice di un esempio di lista del mio prof; Utilizzo il devc++. Sarò grato a tutti coloro che potranno aiutarmi.
Quello che non capisco è il funzionamento della funzione Full quando viene richiamata nel Main. #include <stdio.h> #include <malloc.h> #define LISTAVUOTA NULL typedef int tipobase; typedef short boolean; typedef struct nodo { tipobase info; struct nodo *next; } *list; typedef list position; position End(list l) { if (l==LISTAVUOTA) return(LISTAVUOTA); while (l->next!=LISTAVUOTA) l=l->next; return(l); } position First(list l) { return(LISTAVUOTA); /*se la lista è vuota torna END(l) */ } void MakeNull(list *l) { *l=LISTAVUOTA; } boolean Empty(list l) { return(l==LISTAVUOTA); } boolean Full(list l) { return(0); } void Insert(list *l, position p, tipobase x) { struct nodo * temp; temp=(struct nodo *) malloc(sizeof(struct nodo)); temp->info=x; if (p==LISTAVUOTA) { temp->next=*l; *l=temp; } else { temp->next=p->next; p->next=temp; } } void Delete(list *l, position p) { struct nodo * tmp; if (!Empty(*l) && p!=End(*l)) { if (p==LISTAVUOTA) { tmp=(*l)->next; free (*l); *l=tmp; } else { tmp=p->next; p->next=tmp->next; free (tmp); } } } position Locate(list l, tipobase x) { if (!Empty(l)) { if (l->info==x) return(LISTAVUOTA); while (l->next!=LISTAVUOTA) { if (l->next->info==x) return(l); l=l->next; } return(l); } } tipobase Retrieve(list l, position p) { if (!Empty(l) && p!=End(l)) { if (p==LISTAVUOTA) return(l->info); else return(p->next->info); } } position Next(list l, position p) { if (p!=End(l)) { if (p==LISTAVUOTA) return(l); else return(p->next); } } void visita(list l) { position p,u; tipobase x; int i=0; p=First(l); u=End(l); while (p!=u) { x=Retrieve(l,p); printf("L'elemento di posizione %d e' %d \n",++i,x); p=Next(l,p); } } void insord(list *l, tipobase x) { position p,u; tipobase tmp; if (Empty(*l)) Insert(l,First(*l),x); else { p=First(*l); u=End(*l); while (p!=u) { tmp=Retrieve(*l,p); if (tmp<x) p=Next(*l,p); else break; } Insert(l,p,x); } } main() { list lt; //Variabile locale Lista int s; tipobase elem; position pos; MakeNull(<); do { printf("Menu di Operazioni \n"); printf("1-Inserimento Ordinato \n"); printf("2-Ricerca \n"); printf("3-Cancellazione \n"); printf("4-Visita Lista \n"); printf("5-Fine \n"); printf("Inserisci la scelta ---> "); scanf("%d",&s); fflush(stdin); switch(s) { case 1 : { if (Full(lt)) printf("Lista piena \n"); else { printf("Inserisci l'Elemento da Inserire "); scanf("%d",&elem); fflush(stdin); insord(<,elem); } break; } case 2 : { if (Empty(lt)) printf("Lista Vuota \n"); else { printf("Inserisci l'Elemento da Ricercare \n"); scanf("%d",&elem); fflush(stdin); pos=Locate(lt,elem); if (pos!=End(lt)) printf("Elemento Trovato \n"); else printf("Elemento non Trovato \n"); } break; } case 3 : { if (Empty(lt)) printf("Lista Vuota \n"); else { printf("Inserisci l'Elemento da Cancellare \n"); scanf("%d",&elem); fflush(stdin); pos=Locate(lt,elem); if (pos!=End(lt)) { Delete(<,pos); printf("Elemento Cancellato \n"); } else printf("Elemento non Trovato \n"); } break; } case 4 : { if (Empty(lt)) printf("Lista Vuota \n"); else visita(lt); break; } } } while (s<5); } |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 58
|
Scusate mi sono accorto che incollando il codice la formattazione del testo è andata a farsi benedire, spero possiate aiutarmi comunque.
Ultima modifica di ivan p : 30-05-2009 alle 11:28. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
secondo me c'è qualcosa di sbagliato, li passa un argomento e non lo usa. inoltre non può ritornare sempre zero altrimenti quell'if-else è inutile. Ultima modifica di ndakota : 30-05-2009 alle 13:19. |
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 58
|
Quale argomento non usa? Per quello che ho capito quando il main esamina la condizione la funzione restituisce sempre che la lista non è mai piena e questo non sarebbe corretto perchè può riempirsi. Giusto?
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Se la dimensione della lista non è limitata come fa a diventare piena?
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 58
|
Giusto.
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 58
|
Altro dubbio, perchè Firtst restituisce sempre NULL? Perchè anche Empty restituisce NULL?
Ultima modifica di ivan p : 30-05-2009 alle 14:15. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2783
|
Perché ritorna LISTAVUOTA che hai definito all'inizio come NULL.
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:43.




















