哈希查找是通过计算数据元素的存储地址进行查找的一种方法。
哈希查找的操作步骤:
⑴用给定的哈希函数构造哈希表;
⑵根据选择的冲突处理方法解决地址冲突;
⑶在哈希表的基础上执行哈希查找。
建立哈希表操作步骤:
step1 取数据元素的关键字key,计算其哈希
函数值(地址)。若该地址对应的存储
空间还没有被占用,则将该元素存入;
否则执行step2解决冲突。
step2 根据选择的冲突处理方法,计算关键字
key的下一个存储地址。若下一个存储地
址仍被占用,则继续执行step2,直到找
到能用的存储地址为止。
哈希查找步骤为:
设哈希表为HST[0~M-1],哈希函数取H(key),解决冲突的方法为R(x);
Step1 对给定k值,计算哈希地址 Di=H(k);若HST为空,则查找失败;
若HST=k,则查找成功;否则,执行step2(处理冲突)。
Step2 重复计算处理冲突的下一个存储地址 Dk=R(Dk-1),直到HST[Dk]为
空,或HST[Dk]=k为止。若HST[Dk]=K,则查找成功,否则查找失败。
哈希查找的本质是先将数据映射成它的哈希值。哈希查找的核心是构造一个哈希函数,它将原来直观、整洁的数据映射为看上去似乎是随机的一些整数。
当程序查找哈希表时,如果没有在第一个对应的哈希表项中找到符合查找要求的数据元素,程序就会继续往后查找,直到找到一个符合查找要求的数据元素,或者遇到一个空的表项。
1: #include<stdlib.h>
2: #include<string.h>
3: #include "list.h"
4: #include "hash.h"
5:
6: #define HASH_SIZE
7:
8: static listnode_t
9:
10: void insert(const char * s)
11: {
12:
13:
14:
15:
16:
17: }
18:
19: void print (void)
20: {
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37: }
38:
39: const char *search(const char *s)
40: {
39:
42:
43:
44:
45:
46:
47: