Puntatore di testa, puntatore di coda e tre nodi con informazioni A-B-C
Dichiarazioni
Type
tInfo = "qualsiasi"; {le informazioni nel nodo}
pNodoTC = ^NodoTC;
NodoTC = record
Info: tInfo;
Succ: pNodoTC;
end;
ListaTC = record {puntatori di testa e di coda}
Testa,
Coda: pNodoTC;
end;
Aggiungere un nodo in Testa
procedure AggInTesta(var L: ListaTC; X: tInfo);
Var
P: pNodoTC;
begin
New(P);
P^.Info:=X;
P^.Succ:=L.Testa;
if(L.Testa = Nil) then
L.Coda:=P;
L.Testa:=P;
end;
Aggiungere un nodo in Coda
procedure AggInCoda(Var L: ListaTC; X: tInfo);
Var
P: pNodoTC;
begin
New(P);
P^.Info:=X;
P^.Succ:=Nil;
if(L.Testa = Nil) then
L.Testa:=P
else
L.Coda^.Succ:=P;
L.Coda:=P;
end;
Aggiungere un nodo in Ordine
procedure AggInOrdine(Var L: TListaTC; X: tInfo);
Var
P, Q, R: pNodoTC;
begin
New(P);
P^.Info:=X;
if(L.Testa = Nil) or (X <= L.Testa^.Info) then
begin
P^.Succ:=L.Testa; {...aggiungi primo nodo...}
L.Testa:=P;
if(L.Coda = Nil) then {...aggiungi in testa...}
L.Coda:=P;
end
else if(L.Coda^.Info <= X) then
begin
P^.Succ:=Nil; {...aggiungi in coda...}
L.Coda^.Succ:=P;
L.Coda:=P;
end
else
begin
Q:=L.Testa; {...aggiungi Prima di R...}
R:=L.Testa^.Succ;
while(R^.Chiave < N.Chiave) do
begin
Q:=R;
R:=R^.Succ;
end;
Q^.Succ:=P;
P^.Succ:=R;
end;
end;
Eliminare un nodo in Testa
procedure EliInTesta(Var L: ListaTC);
Var
P: pNodoTC;
begin
if(L.Testa <> Nil) then
begin
P:=L.Testa;
L.Testa:=L.Testa^.Succ;
if(L.Testa = Nil) then
L.Coda:=Nil;
Dispose(P);
end;
end;
|