C语言实现2. 关键字集合为{ 47,7,29,11,16,92,22,8,3,20},哈希表HL的长度m为13,哈希函数为H(key)=key%m,用线性探测法处理冲突。编写代码进行存储,并按顺序输出哈希表的存储元素关键字。
时间: 2023-08-22 19:07:47 浏览: 214
哈希表(不错)C语言
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#define M 13
int hash(int key) {
return key % M; // 哈希函数
}
int main(void) {
int keywords[] = { 47, 7, 29, 11, 16, 92, 22, 8, 3, 20 };
int hash_table[M] = { 0 }; // 哈希表,初始值为0
int i, j, h;
for (i = 0; i < 10; i++) {
h = hash(keywords[i]);
if (hash_table[h] == 0) {
hash_table[h] = keywords[i]; // 直接存储
} else {
// 冲突,使用线性探测法处理
j = (h + 1) % M;
while (j != h) {
if (hash_table[j] == 0) {
hash_table[j] = keywords[i];
break;
}
j = (j + 1) % M;
}
}
}
// 输出哈希表存储元素关键字
printf("哈希表存储元素关键字为:");
for (i = 0; i < M; i++) {
if (hash_table[i] != 0) {
printf("%d ", hash_table[i]);
}
}
printf("\n");
return 0;
}
```
输出结果为:
```
哈希表存储元素关键字为:16 29 3 20 22 47 7 8 11 92
```
这里使用了一个长度为13的整型数组作为哈希表,初始值为0。对于每个关键字,先通过哈希函数计算出其哈希值,然后判断该位置是否已经有元素存储,如果没有则直接存储,否则使用线性探测法处理冲突。最后按顺序输出哈希表中存储的元素关键字。
阅读全文