Puntatore di testa e nodi con informazioni
Dichiarazioni
typedef struct nodo { int info; struct nodo *link; } NODO; typedef NODO *pnodo; typedef pnodo Lista;
Operazioni
Aggiungere un nodo in TESTA
void aggInTesta(Lista *L, int N) { pnodo p; p=(pnodo)malloc(sizeof(NODO)); p->info=N; p->link=(*L); (*L)=p; }
Aggiungere un nodo in CODA
void aggInCoda(Lista *L, int N) { pnodo p; p=(pnodo)malloc(sizeof(NODO)); p->info=N; p->link=NULL; if((*L) == NULL) (*L)=p; else { pnodo prec=(*L); while(prec->link != NULL) prec=prec->link; prec->link=p; } }
Aggiungere un nodo in ORDINE
void AggInOrdine(Lista *L, int N) { pnodo p; p=(pnodo)malloc(sizeof(NODO)); p->info=N; if((*L) == NULL || N <= (*L)->info) { p->link=(*L); (*L)=p; } else { pnodo attuale=(*L); pnodo prossimo=attuale->link; while(prossimo != NULL && prossimo->info < N) { attuale=prossimo; prossimo=prossimo->link; } p->link=prossimo; attuale->link=p; } }
Aggiungere un nodo DOPO un certo nodo
…
Eliminare un nodo in TESTA
…
Eliminare un nodo DOPO un certo nodo
…
Contare i nodi
…
Eliminare TUTTI i nodi
void rilascia(Lista *L) { pnodo p; while((*L) != NULL) { p=(*L); (*L)=(*L)->link; free(p); } }
La più lunga
int piuLunga(Lista L1, Lista L2) { while(L1 != NULL && L2 != NULL) { L1=L1->link; L2=L2->link; } if(L1 == NULL && L2 == NULL) return 0; else if(L2 != NULL) return -1; else return +1; }