- •Модули для лабораторных работ.
- •Var I:byte;
- •Var I:Index;
- •Var I:byte;
- •Interface
- •V:BaseType;
- •Var TablError:byte;
- •Implementation
- •Var I:index;
- •Interface
- •Var tablerror:byte;
- •Implementation
- •Interface
- •Var TablError:byte;
- •Implementation
- •Var I:index;
- •Interface
- •Var TablError:byte;
- •Implementation
- •Var I:index;
- •Interface
- •Implementation
- •Var I:index;
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
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); {деструктор}