请用以上代码写一个完整的散列查找程序
时间: 2023-11-09 13:04:23 浏览: 91
好的,这里是一个完整的散列查找程序,包括散列函数H()的实现和HashSearch1()函数的调用示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define M 13 // 散列表大小
int H(int k) {
return k % M; // 取余散列函数
}
int HashSearch1(int ht[], int m, int k, int *p) {
int i, j;
j = H(k);
i = j;
int empty = -1; // 记录空位置
while (ht[i] != 0) {
if (ht[i] == k) {
*p = i;
return 1;
}
if (ht[i] == -1 && empty == -1) {
empty = i;
}
i = (i + 1) % m;
if (i == j) break;
}
if (ht[i] == 0 && empty != -1) { // 插入元素
ht[empty] = k;
*p = empty;
return 0;
}
printf("溢出");
exit(-1);
}
int main() {
int ht[M] = {0};
int p;
int keys[] = {10, 22, 31, 4, 15, 28, 17, 88, 59};
int n = sizeof(keys) / sizeof(int);
for (int i = 0; i < n; i++) {
int ret = HashSearch1(ht, M, keys[i], &p);
if (ret == 0) {
printf("插入 %d 到位置 %d\n", keys[i], p);
} else {
printf("查找 %d 到位置 %d\n", keys[i], p);
}
}
return 0;
}
```
在main函数中,我们定义一个大小为M的散列表ht,并初始化为0。然后定义一个整型数组keys,存储要查找或插入的元素。接下来,我们通过一个for循环,依次将元素插入到散列表中,并调用HashSearch1函数进行查找和插入操作。如果返回值为0,表示插入成功,输出插入信息;如果返回值为1,表示查找成功,输出查找信息。最后返回0,表示程序正常结束。
阅读全文