type tData=string; {Muze byt libovolny} tUkPrvek=^tPrvek; tPrvek=record Data:tData; UkDalsi:tUkPrvek; end; tLIST=record {Vlastni ATD Seznam} UkAktivni,UkZacatek:tUkPrvek; end; Procedure ListInit(var Seznam:tList); {Vytvor prazdny seznam} begin {ListInit} with Seznam do begin UkZacatek:=nil; UkAktivni:=nil; end; end; {ListInit} Procedure First(var Seznam:tList); {Aktivni bude prvni prvek seznamu} begin {First} with Seznam do UkAktivni:=UkZacatek; end; {First} Procedure Succ(var Seznam:tList); {Aktivni bude prvek za aktivnim prvkem.} begin {Succ} with Seznam do if UkAktivni<>nil then UkAktivni:=UkAktivni^.UkDalsi; end; {Succ} Procedure PostDelete(var Seznam:tList); {Smaz prvek za aktivnim prvkem} var PomUk:tUkPrvek; begin {PostDelete} with Seznam do if UkAktivni<>nil then begin if UkAktivni^.UkDalsi<>nil then begin PomUk:=UkAktivni^.UkDalsi^.UkDalsi; Dispose(UkAktivni^.UkDalsi); UkAktivni^.UkDalsi:=PomUk; end; end; end; {PostDelete} Procedure Actualize(var Seznam:tList;Data:tData); {Dosad novou hodnotu do aktivniho prvku} begin {Actualize} with Seznam do if UkAktivni<>nil then UkAktivni^.Data:=Data; end; {Actualize} Procedure DeleteFirst(var Seznam:tList); {Smaz prvni prvek seznamu} var PomUk:tUkPrvek; begin {DeleteFirst} with Seznam do if UkZacatek<>nil then begin if UkAktivni=UkZacatek then UkAktivni:=nil; PomUk:=UkZacatek^.UkDalsi; Dispose(UkZacatek); UkZacatek:=PomUk; end; end; {DeleteFirst} Function Copy(var Seznam:tList;var Error:boolean):tData; {Vraci hodnotu aktivniho prvku. Neni-li prvek aktivni, vraci chybu} begin {Copy} with Seznam do begin Error:=UkAktivni=nil; if not Error then Copy:=UkAktivni^.Data; end; end; {Copy} Procedure PostInsert(var Seznam:tList;Data:tData); {Vlozi prvek za aktivni prvek} var PomUk:tUkPrvek; begin {PostInsert} with Seznam do if UkAktivni<>nil then begin New(PomUk); PomUk^.Data:=Data; PomUk^.UkDalsi:=UkAktivni^.UkDalsi; UkAktivni^.UkDalsi:=PomUk; end; end; {PostInsert} Procedure InsertFirst(var Seznam:tList;Data:tData); {Vlozi prvni prvek do seznamu} var PomUk:tUkPrvek; begin {InsertFirst} with Seznam do begin New(PomUk); PomUk^.Data:=Data; PomUk^.UkDalsi:=UkZacatek; UkZacatek:=PomUk; end; end; {InsertFirst} Function CopyFirst(var Seznam:tList;var Error:boolean):tData; {Vraci hodnotu prvniho prvku. Je-li seznam prazdny, vraci chybu} begin {CopyFirst} with Seznam do begin Error:=UkZacatek=nil; if not Error then CopyFirst:=UkZacatek^.Data; end; end; {CopyFirst} Function Active(var Seznam:tList):boolean; {Dotaz, zda seznam obsahuje aktivni prvek} begin {Active} Active:= Seznam.UkAktivni<>nil; end; {Active}