#include<stdio.h>
#include<stdlib.h>
int H(int key)
{
return key % 4;
}
int HS(int ht[], int m, int k, int *p)
{
int i, j, flag = 0; /*flag=0表示散列表未满*/
j = H(k); /*计算散列地址*/
i = j; /*记载起始位置*/
while (ht[i] != 0 && flag == 0)
{
if (ht[i] == k) /*查找成功*/
{
*p = i;
return 1;
}
else i = (i + 1) % m; /*向后探测一个位置*/
if (i == j) flag = 1; /*表已满*/
}
if (flag == 1) /*表满,溢出*/
{
printf("溢出\n");
exit(-1);
}
else /*查找不成功,插入*/
{
ht[i] = k;
*p = i;
return 0;
}
}
int ht[9]={0};
int main(){
int ps, x;
while (scanf("%d", &x)){
int rt = HS(ht, 9, x, &ps);
if (rt == 1)
{
printf("已找到%d,位置在ht[%d]\n", x, ps);
}
else
{
printf("未找到%d,插入在ht[%d]\n", x, ps);
}
}
return 0;
}
运行结果: