(aKey: string): integer; virtual ;//HESH-функція з можливістю перевизначення
function Add (aKey: string; found: byte): byte ;//Found :0-до ,1-перед, Повертає :0-без конфлікту, j-осередок
function Search (aKey: string; var aCount: integer): string ;//пошук елемента Hesh-таблиці
procedure DeleteAll ;//видалення всієї таблиці
Procedure SaveHesh (FileName: String) ;//збереження контейнера в файлі
Procedure LoadHesh (FileName: String) ;//завантаження контейнера з файлу
Procedure Extract (var aIndex: integer; var aCur: TItem) ;//Висновок: aIndex-текушего індекс масиву, aCur-поточний ел-т списку
end;
{***********************************}
var Hesh: TMas;
implementation
uses Main, SysUtils, Dialogs;
constructor TItem.Create (aNext: TItem; aKey: string);
begin
next: = aNext;
Key: = aKey;
end;
function TItem.Getnext: TItem;
begin
Result: = next;
end;
procedure TItem.SetNext (aNext: TItem);
begin
next: = aNext;
end;
Function TItem.GetKey: string;
begin
Result: = Key;
end;
{*************************************}
constructor TList.Create (aKey: String);
begin
Head: = TItem.Create (nil, aKey);
end;
function TList.AddFirst (aKey: string): boolean;
var Temp, Current, Previos: TItem;
begin
previos: = Head;
current: = Head.Getnext;
Temp: = TItem.Create (current, aKey);
Temp.next: = current;
previos.next: = Temp;
result: = true;
end;
function TList.AddLast (aKey: string): boolean;
var Temp, Current: TItem;
begin
// Внесення нового елемента в список
Current: = Head.Getnext;
Temp: = TItem.Create (Head.next, aKey);
Head.next: = Temp;
result: = true;
end;
function TList.GetHead: TItem;
begin
Result: = Head;
end;
{*************************************}
constructor TMas.Create (aKey: string);
var i: integer;
begin
for i: = +1 to 10 do mas [i]: = TList.Create (aKey);
end;
function TMas.HeshFunction (aKey: string): integer;// Hesh-функція
var x, i, j: integer;
begin
x: = 0;
for i: = +1 to length (aKey) do x: = ord (aKey [i]) + x;// Визначення значення рядка
j: = (x mod 10) +1;// Визначення елемента
result: = j;
end;
function TMas.Add (aKey: string; found: byte): byte;
var j: integer;
begin
j: = HeshFunction (aKey);
if Found = 0 then
begin
if mas [j]. Head.next <> nil then result: = j else result: = 0;
mas [j]. AddFirst (aKey);
end else
if found = 1 then
begin
if mas [j]. Head.next <> nil then result: = j else result: = 0;
mas [j]. AddLast (aKey);
end;
end;
function Tmas.Search (aKey: string; var aCount: integer): string;
var j: integer; Cur: TItem;
begin
// Пошук в списку
j: = HeshFunction (aKey);
aCount: = 1;
Cur: = mas [j]. GetHead.Getnext;
while (Cur <> nil) and (Cur.key <> aKey) do
begin
inc (aCount);
Cur: = Cur.next;
end;
if Cur = nil then
begin
result: = '0 ';
Exit;
end else
begin
result: = Cur.key;
exit;
end;
end;
procedure TMas.DeleteAll ;//видалення контейнера
var i: integer; Cur: TItem;
begin
for i: = 1 to 10 do
begin
cur: = mas [i]. Head.Getnext;
While Cur <> nil do
begin
mas [i]. Head.next: = Cur.next;
Cur.Destroy;
cur: = mas [i]. Head.next;
end;
end;
Hesh.Destroy;
Hesh: = nil;
end;
Procedure TMas.Extract (var aIndex: integer; var aCur: TItem) ;//Висновок: aIndex-текушего індекс масиву, aCur-поточний ел-т списку
begin
aCur: = mas [aIndex]. Head.next;
end;
Procedure Tmas.SaveHesh (FileName: String) ;//збереження контейнера в файлі
var Current: TItem; tf: TextFile; i: integer;
begin
AssignFile (tf, FileName),
rewrite (tf);
for i: = 1 to 10 do
begin
Current: = mas [i]. Head.Getnext;
while Current <> Nil do
begin
Write (tf, Current.key + ' '); p> Current: = Current.next;
end;
Writeln (tf);
end;
CloseFile (tf);
end;
Procedure...