Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры Данных_модули.DOC
Скачиваний:
28
Добавлен:
23.06.2014
Размер:
84.99 Кб
Скачать

Implementation

Procedure InitList;

var p:PtrEl;

Begin

New(p);

L.Start:=p;

L.Ptr:=L.Start;

p^.next:=nil;

ListError:=ListOk;

End;

Function EmptyList;

Begin

if L.Start^.next=nil then

begin

EmptyList:=true; ListError:=ListEmpty;

end

else begin

EmptyList:=false; ListError:=ListOk

end;

End;

Function FindEl;

Begin

MovePtr_to_Start (L);

MovePtr_to_next(L);

while (L.Ptr^.next<>nil) and (L.Ptr^.Data<>El) do MovePtr_to_next(L);

if L.Ptr^.next=nil then FindEl:=false

else begin

FindEl:=true;

ListError:=ListOk;

end

End;

Procedure FirstElList;

Begin

MovePtr_to_Start(L);

MovePtr_to_next(L);

El:=L.Ptr^.Data;

ListError:=ListOk;

End;

Procedure MovePtr_to_next;

Begin

if L.Ptr^.next<>nil then L.Ptr:=L.Ptr^.next;

ListError:=ListOk;

End;

Procedure MovePtr_to_Start;

Begin

L.Ptr:=L.Start;

ListError:=ListOk;

End;

Procedure MovePtr_to_End;

var p:PtrEl;

Begin

p:=L.Ptr;

while p^.next<>nil do MovePtr_to_next(L);

ListError:=ListOk;

End;

Procedure PutEl_Before;

var p:PtrEl;

Begin

if MaxAvail>SizeOf(Element) then

begin

new(p);

p^.Data:=El;

L.Ptr^.next:=L.Ptr;

p^.next:=L.Ptr^.next;

L.Ptr^.next:=p; ListError:=ListOk;

MovePtr_to_next(L);

end

else ListError:=ListNotMem;

End;

Procedure PutEl_After;

var p:PtrEl;

Begin

if MaxAvail>SizeOf(Element) then

begin

new(p);

p^.Data:=El;

p^.next:=L.Ptr^.next;

L.Ptr^.next:=p; ListError:=ListOk;

MovePtr_to_next(L);

end

else ListError:=ListNotMem;

End;

Procedure GetElList;

var p:PtrEl;

Begin

if not EmptyList(L) then

begin

p:=L.Ptr^.Next;

if p=nil then ListError:=ListEmpty

else

begin

L.Ptr^.Next:=p^.Next;

el:=p^.Data;

Dispose(p);

ListError:=ListOk

end

end

else ListError:=ListEmpty

End;

Procedure DelList;

var p:ptrel;

Begin

repeat

L.Ptr:=L.Start;

L.Start:=L.Start^.next;

Dispose(L.Ptr);

until L.Start=nil;

End;

End.

{-----------------------------------------------------------------------------}

unit UDList;{двусвязный список}

Interface

Const dlistok = 0; {успешное завершение операции}

dlistnotmem = 1; {не хватает памяти}

dlistunder = 2; {список пуст}

Dlistbegin = 3; {указатель указывает на начало списка}

Dlistend = 4; {указатель указывает на конец списка}

error:0..4 = dlistok;

Type BaseType = char;

ElPtr = ^Element;

Element = record

Data:BaseType;

Prev,Next:ElPtr

end;

Dlist = record

BegL,EndL,Ptr:ElPtr

end;

Procedure InitDList(var L:DList);{конструктор}

Procedure PutPrev(var L:DList; E:BaseType);{помещение элемента перед тем, на

который указывает указатель}

Procedure PutNext(var L:DList; E:BaseType);{помещение элемента после того, на

который указывает указатель}

Procedure GetPrev(var L:DList; var E:BaseType);{удаление элемента, стоящего

перед тем, на который указывает указатель}

Procedure GetNext(var L:DList; var E:BaseType);{удаление элемента, стоящего

после того, на который указывает указатель}

Procedure MovePrev(var L:DList);{перемещение указателя на предыдущий элемент}

Procedure MoveNext(var L:DList);{перемещение указателя на следующий элемент}

Procedure BeginPtr(var L:DList);{перемещение указателя на начало}

Procedure EndPtr(var L:DList);{перемещение указателя в конец}

Function Empty(L:DList):boolean;{список пуст?}

Procedure DoneList(var L:DList);{деструктор}