home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2003 January
/
PCWorld_2003-01_cd.bin
/
Software
/
Vyzkuste
/
htmltocz
/
uhash.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2002-09-29
|
2KB
|
75 lines
unit uhash;
interface
{------------------------------------------------------------------------------}
const delka=997;
type interval=1..delka;
zaznam=record
slovo,preklad:string;
end;
ukprvek=^prvek;
hashtable=array[interval] of ukprvek;
prvek=record
dalsi:ukprvek;
data :zaznam;
end;
var tab:hashtable;
procedure init(var tab:hashtable);
function hash(u:ukprvek):interval;
procedure pridej_do_hashtable(var tab:hashtable; z:zaznam);
procedure hledej(tab:hashtable; s:string; var u:ukprvek);
implementation
{------------------------------------------------------------------------------}
procedure init(var tab:hashtable);
var i:interval;
begin for i:=1 to delka do tab[i]:=nil end;
{------------------------------------------------------------------------------}
function hash(u:ukprvek):interval;
const j=10; {pocet znaku klice pro hash}
var s:string; {klic}
ordinal:longint; {soucet ord j znaku}
i:integer; {citac}
begin
ordinal:=0;
s:=u^.data.slovo;
if length(s)<j then for i:=length(s)+1 to j do s:=s+' ';
for i:=1 to j do inc(ordinal,ord(s[i]));
hash:=((ordinal mod delka)+1);
end;
{------------------------------------------------------------------------------}
procedure pridej_do_hashtable(var tab:hashtable; z:zaznam);
var u:ukprvek; h:interval;
begin
new(u);
u^.dalsi:=nil;
u^.data:=z;
h:=hash(u);
u^.dalsi:=tab[h];
tab[h]:=u;
end;
{------------------------------------------------------------------------------}
procedure hledej(tab:hashtable; s:string; var u:ukprvek);
var v:ukprvek;
begin
new(v);
v^.data.slovo:=s;
u:=tab[hash(v)];
while ((u<>nil) and (u^.data.slovo<>s)) do u:=u^.dalsi;
end;
{------------------------------------------------------------------------------}
begin
init(tab);
end.