Datová struktura "seznam"

Dynamický jednosměrný seznam napsaný v Pascalu.
Klíčová slova: programování, Pascal, seznam.

Unit Seznam;
interface

type T      = Byte;
     pprvek = ^Tprvek;
     Tprvek = 
     object
       data : T;
       dalsi : pprvek;
     end;

     tseznam = 
     object
       hlava : pprvek;
       iter : pprvek;
       pocet_prvku:longint;
       zarazka:pprvek;
       constructor vytvor;
       procedure vloz(d:T);
       procedure vloznakonec(d:T);
       procedure smaz(p:pprvek);
       function najdi(d:T):pprvek;
       procedure vyprazdni;
       procedure vypis_seznam;
       destructor zrus;
       function next:pprvek;
       procedure reset;
       function pocet_prv:longint;
     end;

implementation

constructor tseznam.vytvor;
begin
  new(hlava);
  zarazka:=hlava;
  zarazka^.dalsi:=nil;
  iter:=hlava;
  pocet_prvku:= 0;
end;

procedure tseznam.vloz(d:t);
var h1:pprvek;
begin
  pocet_prvku:=pocet_prvku+1;
  new(h1);
  h1^.data:=d;
  h1^.dalsi:=hlava;
  hlava:=h1;
  iter:=hlava;
end;

procedure tseznam.vloznakonec(d:t);
var h1:pprvek;
begin
  pocet_prvku:=pocet_prvku+1;
  zarazka^.data:=d;
  new(zarazka^.dalsi);
  zarazka:=zarazka^.dalsi;
end;


procedure tseznam.smaz(p:pprvek);
var x:pprvek;
begin
 p^.data:=p^.dalsi^.data;
 x:=p^.dalsi^.dalsi;
 if p^.dalsi = zarazka then zarazka := p;
 dispose(p^.dalsi);
 p^.dalsi:=x;
 pocet_prvku:=pocet_prvku-1;
end;

function tseznam.najdi(d:T):pprvek;
var x:pprvek;
begin
  zarazka^.data:=d;
  x:=hlava;

  while x^.data<>d do x:=x^.dalsi;
  najdi:=x;
end;

procedure tseznam.vypis_seznam;
var x:pprvek;
begin
  x:=hlava;
  while x<>zarazka do
  begin
    write(x^.data);
    x:=x^.dalsi;
  end;
  writeln('');
end;

procedure tseznam.vyprazdni;
var x:pprvek;
begin
  x:=hlava;
  while x<>zarazka do
  begin
    hlava:=x^.dalsi;
    dispose(x);
    x:=hlava;
  end;
end;

destructor tseznam.zrus;
begin
  if hlava<>zarazka then vyprazdni;
  dispose(hlava);
  hlava:=nil;
  zarazka:=nil;
end;

procedure tseznam.reset;
begin
  iter:= hlava;
end;

function tseznam.next:pprvek;
begin
  if iter=zarazka then next:=nil
  else
  begin
    next := iter;
    iter := iter^.dalsi;
  end;
end;

function tseznam.pocet_prv:longint;
begin
  pocet_prv:=pocet_prvku;
end;
end.
Tags: