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;
Operazioni
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;