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

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;{реализация односвязного списка на массиве}