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

Interface

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

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

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

Listend = 3; {список полон}

Memsize = 10;

Type BaseType = char;

PtrEl=0..memsize; {указатель}

Element=record

Data:BaseType;

Next:ptrel;

end;

List=record

Start,Ptr:PtrEl;

end;

Mem = array[PtrEl] of Element;

Var listerror:byte;

n:Ptrel;

m:Mem;

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

Procedure New(var p:PtrEl); {создание нового элемента}

Procedure Dispose(var p:PtrEl); {удаление элемента}

Procedure InitList(var L:List); {инициализация списка}

Procedure PutList(var L:List;e:BaseType); {помещение элемента в список}

Procedure GetList(var L:List;var e:BaseType); {удаление элемента из списка}

Function FullList(L:List):boolean; {список полон?}

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

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

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

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

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

Implementation

Procedure InitMem;

var i:PtrEl;

Begin

for i:=1 to memsize-1 do m[i].Next:=i+1;

m[memsize].Next:=1;

End;

Function FullList;

Begin

FullList:=m[1].Next=0;

End;

Procedure New;

Begin

p:=m[1].Next;

m[1].Next:=m[p].Next

End;

Procedure Dispose;

Begin

m[p].Next:=m[1].Next;

m[1].Next:=p;

End;

Procedure InitList;

Begin

L.Ptr:=0;

L.Start:=0;

end;

Procedure PutList;

var p:PtrEl;

Begin

if not FullList(L) then

begin

New(p);

m[p].Data:=e;

m[p].Next:=m[L.Ptr].Next;

m[l.ptr].Next:=p;

listerror:=listok;

end

else listerror:=listnotmem;

End;

Function EmptyList;

Begin

EmptyList:=m[L.Start].Next=0;

End;

Procedure GetList;

var p:PtrEl;

Begin

if not(EmptyList(L)) then

if m[L.Ptr].Next<>0 then

begin

p:=m[L.Ptr].Next;

e:=m[p].Data;

m[L.Ptr].Next:=m[p].Next;

Dispose(p);

listerror:=listok

end

else listerror:=listend

else listerror:=listunder;

End;

Procedure MovePtr;

Begin

if m[L.Ptr].Next<>0 then

begin

L.Ptr:=m[L.Ptr].Next;

listerror:=listok;

end

else listerror:=listend;

End;

Procedure BeginPtr;

Begin

L.Ptr:=L.Start;

listerror:=listok

End;

Procedure EndPtr;

Begin

while m[L.Ptr].Next<>0 do L.Ptr:=m[L.Ptr].Next;

listerror:=listok

End;

Procedure DoneList;

var p:PtrEl; e:BaseType;

Begin

BeginPtr(L);

while m[L.Ptr].Next<>0 do GetList(L,e);

Dispose(L.Start);

L.Ptr:=0;

L.Start:=0

End;

End.

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

unit UListDM;{односвязный список в динамической памяти}

Interface

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

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

listnotmem = 3;{не хватает памяти}

listend = 4;{список полон}

sizemem = 5;

Type BaseType = char;

PtrEl = ^Element;

Element = record

Data:BaseType;

Next: PtrEl;

end;

List = record

Start, Ptr: PtrEl;

end;

Var ListError : 1..4;

Procedure InitList (var L:List); {контруктор}

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

Function FindEl (var L:List; El:BaseType):boolean; {есть элемент в списке}

Procedure FirstElList (var L:List; var El:BaseType); {перемещение указателя на первый элемент списка}

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

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

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

Procedure PutEl_Before(var L:List; El:BaseType); {помещение элемента в список

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

Procedure PutEl_After (var L:List; El:BaseType); {помещение элемента в список

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

Procedure GetElList (var L:List; var El:BaseType); {удаление элемента из списка}

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