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

Lista semplice

Precedente
SUPERIORE
Successiva

Puntatore di testa e tre nodi con informazioni A-B-C

Dichiarazioni

Type
  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 TESTA

procedure 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 CODA

procedure 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 ORDINE

procedure 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 nodo

procedure 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 nodi

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

Confronta

function 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

bulletVisualizzare il contenuto della lista
bulletQuanti nodi con una certa informazione?
bulletRicerca sequenziale (puntatore e/o indice...)
bulletMinimo, massimo, ..., totale, media?
bulletCopiare, appendere, concatenare
bulletEliminare un nodo con chiave, con puntatore
bulletScambiare le informazioni di due nodi
bulletOrdinare

Lista semplice - ApPuNtIdIuNiNfOrMaTiCo

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

Precedente
SUPERIORE
Successiva