思考:有什么办法使得查找时间快,占用空间小
哈希表基本原理
哈希表的基本原理是使用一个下标范围比较大的数组A来存储元素,设计一个函数h,对于要存储的线性表的每个元素node,取一个关键字key,算出一个函数值h(key),把h(key)作为数组下标,用A[h(key)]这个数组单元来存储node。也可以简单理解为,按照关键字为每一个元素“分类”,然后将这个元素存储在相应“类”所对应的地方。
哈希函数的构造
构造哈希函数有两个标准:简单和均匀
哈希函数的关键字一般是整数或者字符串
最常用的哈希函数:除余法,即h(key)=key mod m。m为素数,可以使得较好保证分布均匀。
function hash(key:integer):integer;
begin
exit(key mod m);
end;
冲突的处理——拉链法
采用分离链接技术构造哈希表,把哈希值相同的关键字串成链表,即哈希值为x的所有元素存储在以head[x]为表头的单链表中。
哈希表的基本操作
const
maxn=10000;//哈希表容量
limit=1007;//哈希函数的模
type
node=record //哈希表元素类型
key,next:integer;
end;
var
head:array[1..limit] of integer;
hash:array[1..maxn] of node;
i,j,n,m,tot,key:integer;
元素插入
procedure insert(key:integer);
begin
inc(tot);
hash[tot].key:=key;
hash[tot].next:=head[key mod limit];
head[key mod limit]:=tot;
end;
元素查找
function find(key:integer):boolean;
var
tmp:integer;
begin
tmp:=head[key mod limit];
while tmp<>-1 do
begin
if hash[tmp].key=key then exit(true);
tmp:=hash[tmp].next;
end;
exit(false);
end;
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/boyxiejunboy/article/details/46969691