LISTY
LISTY :
jednokierunkowe
dwukierunkowe
cykliczne
nil
2
16
9
nil
headL
nil
2
16
9
headL
2
16
9
type
wsk = ^ element ;
element = record
prev : wsk;
key : integer;
next : wsk
end ;
var
headL : wsk ;
pre
v
nex
t
ke
y
headL
procedure LIST_INSERT1 (var k : Integer ; var headL : wsk);
{ Dołącza element o kluczu k na początek listy
dwukierunkowej }
var pom : wsk;
begin
New (pom);
pom^.key := k;
pom^.prev := nil;
pom^.next. := headL;
if headL <> nil then headL^.prev := pom ;
headL := pom
end;
procedure LIST_INSERT2 (var k : Integer ; var za: wsk; var
headL : wsk);
{Dołącza element o kluczu k za element „za” listy
dwukierunkowej}
var przed, pom : wsk;
begin
New (pom);
przed := za^.next ;
if przed <> nil then
begin
pom^.key := k;
pom^.prev := za;
pom^.next. := przed;
przed^.prev := pom;
za^.next := pom
end
else
begin
pom^.key :=
k;
pom^.prev :=
za;
pom^.next :=
nil;
za^.next :=
pom
end;
end;
procedure LIST_SEARCH1 (var k : Integer ; var headL : wsk; var
jest: wsk);
{ Znajduje na liście element o kluczu k }
var pom : wsk ;
begin
jest := nil;
pom := headL;
while ( pom <> nil ) do
begin
if (pom^.key <> k) then pom := pom^.next
else
begin
jest := pom;
pom := nil;
end
end
end;
procedure LIST_SEARCH2 (var k : Integer ; var headL : wsk; var
jest: wsk);
{ Znajduje na liście element o kluczu k }
var pom : wsk ;
begin
pom := headL;
while (( pom <> nil ) and ( pom^.key <> k )) do
pom := pom^.next ;
jest := pom;
end;
procedure LIST_DELETE1 (var headL : wsk);
{Usuwa pierwszy element z listy}
var pom : wsk;
begin
if headL <> nil then
begin
headL := headL^.next;
if headL <> nil then headL^.prev := nil
end
end;
Procedure LIST_DELETE 2 (var el: wsk; var headL : wsk);
{Usuwa element o wskazniku el z listy}
var pom : wsk;
begin
if el^.prev <> nil
then begin
pom := el^.prev;
pom^.next := el^.next
end
else headL := el^.next;
if el^.next <> nil
then begin
pom := el^.next;
pom^.prev := el^.prev
end;