Puntatore di testa e tre nodi con informazioni A-B-C
DichiarazioniType
tInfo = "qualsiasi"; {le informazioni nel nodo}
pNodo = ^Nodo;
Nodo = record
Info: tInfo;
Succ: pNodo; (puntatore in avanti)
end;
Lista = pNodo; {puntatore di testa}Aggiungere un nodo in TESTAprocedure 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 CODAprocedure 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 ORDINEprocedure 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 nodoprocedure 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 nodifunction 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;
Confrontafunction 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 |
|