Obousměrný seznam s aktivním prvkem:


type
  spoj = ^prvek;
  prvek = record
    hodnota: integer;
    predchozi, dalsi: spoj;
  end;

var
  seznam: record
    prvni, posledni, aktivni: spoj;
  end;

procedure Vytvor;
{ Vytvori seznam, tedy inicializuje vsechny prvky na NIL }
begin
  with seznam do begin
    prvni := nil;
    posledni := nil;
    aktivni := nil;
  end;
end; 

function Prazdny: boolean;
{ Zjisti, zda je seznam prazdny (true), pokud neni prazdny, vraci false }
begin
  Prazdny := seznam.prvni=nil;
end; 

procedure PridejNaKonec(x: integer);
{ Prida prvek na konec seznamu, tedy za posledni prvek seznamu }
begin
  with seznam do begin
    New(aktivni);
    with aktivni^ do begin  
      hodnota := x;
      dalsi := nil;
      predchozi := posledni;
    end;
    if Prazdny then prvni := aktivni
               else posledni^.dalsi := aktivni;
    posledni := aktivni;      
  end;
end;

procedure PridejNaZacatek(x: integer);
{ Prida prvek na zacatek seznamu, tedy pred prvni prvek }
begin
  New(aktivni);
  with seznam do begin
    with aktivni^ do begin
      hodnota := x;
      predchozi := nil;
      dalsi := prvni;
    end;
    if Prazdny then posledni := aktivni
               else prvni^.predchozi := aktivni;
    prvni := aktivni;
  end;
end;

 procedure PridejZaAktivni(x: integer);
{ Prida prvek za aktivni prvek seznamu, ostatni jsou "odsunuty" dale,
  aktivnim se stane pridany prvek }
var
  pom: spoj;
begin
  New(pom);
  with seznam do begin
    with pom^ do begin
      hodnota := x;
      predchozi := aktivni;
    end;
    if Prazdny then begin
      prvni := pom;
      posledni := pom;
      pom^.dalsi := nil;
    end else begin
      pom^.dalsi := aktivni^.dalsi;
      if aktivni^.dalsi <> nil then
        aktivni^.dalsi^.predchozi := pom;
      aktivni^.dalsi := pom;
    end;
    aktivni := pom;
  end;
end;

procedure OdeberAktivni(var x: integer);
{ Ze seznamu vyjme prvek oznaceny jako aktivni, aktivnim se stane prvni prvek seznamu }
begin
  if Prazdny then write('Seznam je prazdny, neni co odebrat!')
  else with seznam do begin
    x := aktivni^.hodnota;  
    if aktivni = prvni then prvni := aktivni^.dalsi
                       else aktivni^.predchozi^.dalsi := aktivni^.dalsi;
    if aktivni = posledni then posledni := aktivni^.predchozi
                          else aktivni^.dalsi^.predchozi := aktivni^.predchozi;
    Dispose(aktivni);
    aktivni := prvni;
  end;
end;

procedure NaZacatek;
{ V seznamu se aktivnim prvkem stane prvni prvek }
begin
  with seznam do aktivni := prvni;
end;

procedure NaKonec;
{ V seznamu se aktivnim prvkem stane posledni prvek }
begin
  with seznam do aktivni := posledni;
end;

procedure Dopredu;
{ V seznamu se posuneme o prvek zpet, aktivnim se tedy stane
  prvek pred aktivnim prvkem }
begin
  with seznam do
    if aktivni <> prvni then aktivni := aktivni^.predchozi;
end;

procedure Dal;
{ V seznamu se posuneme o prvek dale, aktivnim se tedy stane
  naslednik prvku, ktery byl dosud aktivni }
begin
  with seznam do
    if aktivni <> posledni then aktivni := aktivni^.dalsi;
end;