哈希查找方法
已知哈希表长度为11,哈希函数为H(key)=key%11,随机产生待散列的小于50的8个元素,同时采用线性探测再散列的方法处理冲突。任意输入要查找的数据,无论是否找到均给出提示信息。
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) /如果探测的位置是-1,则说明要查找的数不存在 /
return NULL;
else
return t;
}
void creathash(int key) /自定义函数创建哈希表 /
{
int pos, t;
pos = func(key); /哈希函数确定元素的位置 /
t = pos;
while (hashtable[t] != - 1) /如果该位置有元素存在,则进行线性探测再散列 /
{
t = (t + 1) % Max;
if (pos == t)
/如果冲突处理后确定的位置与原位置相同,则说明哈希表已满 /
{
printf("哈希表已满\n");
return ;
}
}
hashtable[t] = key; /将元素放入确定的位置 /
}