
- •Модули для лабораторных работ.
- •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 TablSize=5;
c1=17;
c2=3;
Type index=1..TablSize;
BaseType=string[5];
PtrEl=^Element;
Element=record
key:longint;
Data:BaseType;
next:PtrEl;
end;
Tabl=array [index] of Element;
Function Hesh(b:longint):index;{вычисление адреса элемента}
Procedure InitTabl(var T:Tabl);{конструктор}
Procedure Put(var T:Tabl;E:Element);{помещение элемента в таблицу}
Function Search(T:Tabl;var E:Element;k:longint):boolean;{поиск элемента в
таблице по его ключу}
Function Del(var T:Tabl;k:longint):boolean;{удаление элемента из таблицы}
Implementation
Function Hesh;
Begin
Hesh:=((c1*b + c2) mod TablSize)+1
End;
Procedure InitTabl;
Var I:index;
Begin
for i:=1 to TablSize do
with T[i] do
begin
new(next);
next:=nil;
Data:='';
key:=0;
end;
End;
Procedure Put;
var a:index;
p:PtrEl;
Begin
a:=Hesh(E.key);
new(p);
with T[a] do
begin
if (next=nil)and(key=0) then
begin
key:=E.key;
Data:=E.data
end
else
begin
while next<>nil do T[a].next:=T[a].next^.next;
next:=p;
next^.next:=nil;
next^.Data:=E.Data;
next^.key:=E.key
end
end
End;
Function Search;
var a:index;
Begin
a:=Hesh(k);
with T[a] do
begin
while (next<>nil)and(key<>k) do next:=next^.next;
if key=k then
begin
E.Data:=Data;
E.next:=nil;
E.key:=key;
Search:=true
end
else Search:=false
end
End;
Function Del;
var a:index;
p:PtrEl;
bool:boolean;
Begin
a:=Hesh(k);
bool:=true;
with T[a] do
begin
if (next=nil)and(key=k) then
begin
key:=0;
Data:='';
Del:=true
end
else if (next=nil)and(key<>k) then Del:=false
else
begin
while (next^.next<>nil) and bool do
if next^.key=k then
if next^.next=nil then
begin
p:=next;
Data:=next^.data;
key:=next^.key;
next:=next^.next;
dispose(p);
Del:=true;
bool:=false
end
else
begin
p:=next;
next:=next^.next;
dispose(p);
Del:=true;
bool:=false
end
else next:=next^.next;
if bool and (k=next^.key) then
begin
p:=next;
dispose(p);
next:=nil;
Del:=true
end
else Del:=false
end
end
End;
End.
{---------------------------------------------------------------------------}
unit UListSM;{реализация односвязного списка на массиве}