Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Lista a doppi puntatori

Precedente
SUPERIORE
Successiva

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;

Lista a doppi puntatori - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva