
- •Модули для лабораторных работ.
- •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
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);{деструктор}