Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
02.01.2020
Размер:
41.02 Кб
Скачать

Implementation

//-----------------------------------------------------------------------------

function Next(a: PNode):PNode;

begin

if a = nil then begin Result:= nil; exit end

else Result:= a^.next;

end;

//-----------------------------------------------------------------------------

function Last(L: List):PNode;

begin

Result:= L;

if L = nil then exit

else while Result^.next <> nil do

Result:= Next(Result);

end;

//-----------------------------------------------------------------------------

function PredLast(L: List; var p: PNode):PNode;

begin

Result:= L;p:= L;

if L = nil then exit;

if L^.next = nil then exit

else while Result^.next <> nil do

begin

p:= Result;

Result:= Next(Result)

end;

end;

//-----------------------------------------------------------------------------

function Number(L: List): Cardinal;

begin

Result:= 0;

while L <> nil do

begin

L:= Next(L);

inc(Result);

end;

end;

procedure AddR(var L: List; a: T);

var p,r,k:PNode;

begin

if l=nil then l:=createE(a)

else

begin

r:=l;

p:=last(l);

l:=createE(a);

k:=l;

l:=p;

l.next:=k;

l:=r;

end;

end;

//-----------------------------------------------------------------------------

procedure AddL(var L: List; a: Integer);

var p: PNode;

begin

if l=nil

then

l:=createE(a)

else

begin

p:=l;

l:=createE(a);

l^.next:=p;

end;

end;

//-----------------------------------------------------------------------------

function H(var L: List): T;

var p: PNode;

begin

p:=l^.next;

result:=l^.key;

dispose(l);

l:=p;

end;

//-----------------------------------------------------------------------------

function H_(var L: List): T;

var k:list;

begin

if l.next=nil then

begin

result:=l.key;

empty(l);

end

else

begin

k:=l;

l:=tail_(k);

result:=k.key;

end;

end;

//-----------------------------------------------------------------------------

function Tail(var L: List): List;

begin

if l=nil then result:=nil

else if l^.next<>nil then

begin

result:=l^.next;

l^.next:=nil;

end

else result:=nil;

end;

//-----------------------------------------------------------------------------

function Tail_(var L: List): List;

Var p:pnode;

begin

result:=l;

p:=result;

l:=predlast(result,result);

result.next:=nil;

result:=p;

end;

//-----------------------------------------------------------------------------

procedure Empty(var L: List);

// Операция Опустошить. Опустошает список.

Var p: pNode;

begin

while l<>nil do

begin

p:=l^.next;

dispose(l);

l:=p;

end;

end;

//-----------------------------------------------------------------------------

procedure Merge(var L,N: List);

Var k:pnode;

begin

k:=l;

l:=last(l);

l.next:=n;

l:=k;

end;

//-----------------------------------------------------------------------------

function ListToStr(L: List): String;

//Опрация. СписокВСтроку. Формирует строку, содержащую элементы списка

begin

if l = nil then result:='List empty'

else

begin

while l <> nil do

begin

result:=result+','+inttostr(l^.key);

l:=l.next;

end;

delete(result,1,1);

end;

end;

//-----------------------------------------------------------------------------

function EToStr(a: PNode): String;

Соседние файлы в папке Зайцев М. Г.