Puntatore di testa, puntatore di coda e tre nodi con puntatori nelle due direzioni
Dichiarazioni
Type
tInfo = "qualsiasi"; {le informazioni nel nodo}
pNodoDP = ^NodoDP;
NodoDP = record
Info: tInfo;
Succ, {puntatori nelle due direzioni}
Prec: pNodoDP;
end;
ListaDP = record
Testa,
Coda: pNodoDP;
end;
Aggiungere un nodo in Testa
procedure AggInTesta(var L: ListaDP; X: tInfo);
Var
P: pNodoDP;
begin
New(P);
P^.Info:=X;
P^.Prec:=Nil;
P^.Succ:=L.Testa;
if(L.Testa <> Nil) then
L.Testa^.Prec:=P
else
L.Coda:=P;
L.Testa:=P;
end;
Aggiungere un nodo in Coda
procedure AggInCoda(Var L: ListaDP; X: tInfo);
Var
P: pNodoDP;
begin
New(P);
P^.Info:=X;
P^.Succ:=Nil;
P^.Prec:=L.Coda;
if(L.Coda <> Nil) then
L.Coda^.Succ:=P
else
L.Testa:=P;
L.Coda:=P;
end;
Aggiungere un nodo in Ordine
procedure AggInOrdine(Var L: ListaDP; X: tInfo);
var
P, Q: pNodoDP;
begin
New(P);
P^.Info:=X;
if(L.Testa = Nil) Or (X <= L.Testa^.Info) then
begin
P^.Prec:=Nil; {...aggiungi primo nodo...}
P^.Succ:=L.Testa;
if(L.Testa = Nil) then {...aggiungi in testa...}
L.Coda:=P;
else
L.Testa^.Prec:=P;
L.Testa:=P;
end
else if(L.Coda^.Info <= X) then
begin
P^.Prec:=L.Coda; {...aggiungi in coda...}
P^.Succ:=Nil;
L.Coda^.Succ:=P;
L.Coda:=P;
end
else
begin
Q:=L.Testa^.Succ; {...aggiungi prima di Q...}
while(Q^.Info < X) do
Q:=Q^.Succ;
P^.Prec:=Q^.Prec;
P^.Succ:=Q;
Q^.Prec^.Succ:=P;
Q^.Prec:=P;
end;
end; |