Puntatore di testa e tre nodi con informazioni A-B-C
Dichiarazioni
Type tInfo = "qualsiasi"; { le informazioni nel nodo } pNodo = ^Nodo; Nodo = Record Info: tInfo; Succ: pNodo; ( puntatore in avanti ) End; Lista = pNodo; { puntatore di testa }
Operazioni
Aggiungere un nodo in TESTA
Procedure AggInTesta(Var L: Lista; X: tInfo); Var P: pNodo; Begin New(P); P^.Info:=X; P^.Succ:=L; L:=P; End;
Aggiungere un nodo in CODA
Procedure AggInCoda(Var L: Lista; X: tInfo); Var P, Q, R: pNodo; Begin New(P); P^.Info:=X; P^.Succ:=Nil; If(L = Nil) Then L:=P {...aggiungi in testa...} Else Begin Q:=L; {...aggiungi dopo Q^...} R:=L^.Succ; While(R <> Nil) do Begin Q:=R; R:=R^.Succ; End; Q^.Succ:=P; End; End<;
Aggiungere un nodo in ORDINE
Procedure AggInOrdine(Var L: Lista; X: tInfo); Var P, Q, R: pNodo; Begin New(P); P^.Info:=X; If(L = Nil) Or (X <= L^.Info) Then Begin P^.Succ:=L; {...aggiungi in testa...} L:=P; End Else Begin Q:=L; {...aggiungi dopo Q^...} R:=L^.Succ; While(R <> Nil) And (R^.Info < X) Do Begin Q:=R; R:=R^.Succ; End; Q^.Succ:=P; P^.Succ:=R; End; End;
Aggiungere un nodo DOPO un certo nodo
Procedure AggDopo(Var L: Lista; Q: pNodo; X: tInfo); Var P: pNodo; Begin New(P); P^.Info:=X; P^.Succ:=Q^.Succ; Q^.Succ:=P; End;
Per ipotesi Q esiste.
Eliminare un nodo in TESTA
Procedure EliInTesta(Var L: Lista); Var P: pNodo; Begin If(L <> Nil) Then Begin P:=L; L:=L^.Succ; Dispose(P); End; End;
Eliminare un nodo DOPO un certo nodo
Procedure EliDopo(Var L: Lista; Q: pNodo); Var P: pNodo; Begin P:=Q^.Succ; If(P <> Nil) Then Begin Q^.Succ:=Q^.Succ^.Succ; Dispose(P); End; End;
Per ipotesi Q esiste mentre Q^.Succ...
Contare i nodi
Function ContaNodi(L: Lista): LongInt; Var Risp: LongInt; Begin Risp:=0; While(L <> Nil) Do Begin Inc(Risp); L:=L^.Succ; End; ContaNodi:=Risp; End;
Eliminare TUTTI i nodi
Procedure Distruggi(Var L: Lista); Var P: pNodo; Begin While(L <> Nil) Do Begin P:=L; L:=L^.Succ; Dispose(P); End; L:=Nil; End;
Confronta
Function Confronta(L1, L2: Lista): Boolean; Begin while(L1 <> Nil) And (L2 <> Nil) And (L1^.Info = L2^.Info) Do Begin L1:=L1^.Succ; L2:=L2^.Succ; End; Confronta:=(L1 = Nil) And (L2 = Nil); End;
Esercizi
- Visualizzare il contenuto della lista
- Quanti nodi con una certa informazione?
- Ricerca sequenziale (puntatore e/o indice...)
- Minimo, massimo, ..., totale, media?
- Copiare, appendere, concatenare
- Eliminare un nodo con chiave, con puntatore
- Scambiare le informazioni di due nodi
- Ordinare