06 - Dvostruko ulančana lista

Primer programa koji žonglira dvostruko ulančanu listu:

program du_lista;
type
  pok=^slog;
  slog=record
    ime:string[20];
    le, de:pok;
  end;
var
  l,d:pok;
  levodesno:char;
  brisanje:string[20];
procedure dodaj(var l,d:pok; gde:char);
var
  i:string[20];
  tmp:pok;
begin
  write('Unesite ime: ');
  readln(i);
  if l=nil then begin
    new(l);
    l^.ime:=i;
    l^.le:=nil;
    l^.de:=nil;
    d:=l;
    end
  else
    case gde of
      'l','L': begin
                 tmp:=l;
                 new(l);
                 l^.ime:=i;
                 l^.le:=nil;
                 l^.de:=tmp;
                 tmp^.le:=l;
               end;
      'd','D': begin
                 tmp:=d;
                 new(d);
                 d^.ime:=i;
                 d^.de:=nil;
                 d^.le:=tmp;
                 tmp^.de:=d;
               end;
    end;
end;

procedure ispis(l,d:pok);
begin
  writeln('Sledi ispis liste:');
  if l=nil then
    writeln('Lista je prazna')
  else
    while l<>nil do begin
      writeln(l^.ime);
      l:=l^.de;
    end;
end;

procedure brisi(var l,d:pok; trazi:string);
var
  nasao:boolean;
  tmp:pok;
begin
  nasao:=false;
  tmp:=l;
  while not(nasao) and (tmp<>nil) do
    if tmp^.ime=trazi then
      nasao:=true
    else
      tmp:=tmp^.de;
  if nasao then begin
    if tmp^.le<>nil then
      tmp^.le^.de:=tmp^.de
    else
      l:=tmp^.de;
    if tmp^.de<>nil then
      tmp^.de^.le:=tmp^.le
    else
      d:=tmp^.de;
    dispose(tmp);
  end;
end;

begin {glavni program}
  l:=nil;
  d:=nil;
  levodesno:='l';
  while levodesno in ['l','L','d','D'] do begin
    dodaj(l,d,levodesno);
    write('Zelite li da unesete element levo ili desno? (L/D) ');
    readln(levodesno);
  end;
  writeln;
  ispis(l,d);
  writeln;
  write('Koji element brisem? ');
  readln(brisanje);
  brisi(l,d,brisanje);
  writeln;
  ispis(l,d);
  writeln;
  write('Kraj programa (pritisnite ENTER)');
  readln;
end.
Vi ste ovde: Home Predavanja Treća godina Informatički smer - Programski jezici 06 - Dvostruko ulančana lista