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;