基于线性探测解决哈希冲突的哈希表
哈希表概念
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
哈希冲突
不同的关键字通过同一哈希转换函数计算出相同的哈希地址
处理哈希冲突
常见的两种方法是闭散列和开散列
闭散列:(开放地址法或者也叫线性探测法)
当发生冲突时,如果哈希表未被填满,说明哈希表中必然有空位置,可以把key放到列表中“下一个”空位置中。
哈希表定义
7 #define max_size 1000
8
9 typedef int KeyType;
10 typedef int ValType;
11 typedef char DataType;
12 typedef int (*HashFunc)(KeyType key);
13 //哈希数组元素的状态
14 typedef enum Stat
15 {
16 Empty, //未插入
17 Valid, //插入
18 Deleted//删除
19 }Stat;
20
21 //哈希表数组中的元素类型
22 typedef struct HashElem
23 {
24 KeyType key; //包含一个键值
25 ValType value; //包含一个值
26 Stat stat; //定义哈希表中的元素状态
27 }HashElem;
28 //定义哈希表
29 typedef struct HashTable
30 {
31 HashElem data[max_size];
32 int size; //有效元素个数
33 HashFunc func; //哈希函数
34 }HashTable;
哈希表的初始化
36 //哈希表的初始化
37 void HashInit(HashTable* ht,HashFunc hash_func)
38 {
39 if(ht==NULL)
40 {
41 return ;
42 }
43 ht->size=0;
44 ht->func&