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.


Predavanja