1 题目
功能:哈希查找
描述:
哈希表长度 11
哈希函数 (key)=key%11
采用线性探测再散列的方法处理冲突
2 思路
哈希函数简要介绍
哈希函数的构造方法
哈希函数的构造方法常用的有5种,分别是数字分析法、平方取中法、分段叠加、伪随机数法和余数法,其中余数法比较常用。
例子中已给出哈希函数,按照给出的哈希函数进行了构造
避免哈希冲突的方法
分别有开放定址法(包括线性探测再散列和二次探测再散列入、链地址法、再哈希法和建立公共溢出区
开放定址法中的线性探测再散列比较常用,该方法的特点是在冲突发生时,顺序查看表中的下一单元,直到找出一个空单元或査遍全表。
3 代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define Max 11
#define N 8
/**
功能:哈希查找
描述:
哈希表长度 11
哈希函数 (key)=key%11
采用线性探测再散列的方法处理冲突
**/
int hashtable[Max];
int func(int value) {
return value % Max; // 哈希函数
}
int search(int key) {
// 自定义函数实现哈希查询
int pos, t;
pos = func(key); // 哈希函数确定出的位置
t = pos; // t存放确定出的位置
while (hashtable[t] != key && hashtable[t] != - 1) {
// 如果该位置上不等于要查找的关键字且不为空
t = (t + 1) % Max; // 利用线性探测求出下一个位置
if (pos == t)
// 如果经多次探测又回到原来用哈希函数求出的位置则说明要查找的数不存在
return - 1;
}
if (hashtable[t] == - 1)