数据结构用C语言代码实现:选取哈稀函数H(k)=(3k)MOD 11。用开放定址法处理冲突,di=i(i=1,2,3,…).试在0-10的散列地址空间中对关键字序列(22,41,53,46,30,13,01,67)造哈希表哈希查找方法。
时间: 2024-02-12 20:09:29 浏览: 86
基于C语言的尾号为 0 的数据结构课程设计题【100011811】
好的,我会根据您提供的数据结构和要求进行实现。
以下是利用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define SUCCESS 1
#define UNSUCCESS 0
#define DUPLICATE -1
// 哈希函数H(k)=(3k)MOD 11
int hash(int key) {
return (3 * key) % 11;
}
// 初始化哈希表
void initHashTable(int *H, int size) {
for (int i = 0; i < size; i++) {
H[i] = -1;
}
}
// 插入元素
int insert(int *H, int key, int size) {
int addr = hash(key); // 计算哈希地址
int i = 0;
while (H[addr] != -1) { // 冲突处理
if (H[addr] == key) { // 已有相同元素
return DUPLICATE;
}
i++;
addr = (addr + i) % size; // 开放定址
}
H[addr] = key;
return SUCCESS;
}
// 查找元素
int search(int *H, int key, int size) {
int addr = hash(key);
int i = 0;
while (H[addr] != -1) {
if (H[addr] == key) {
return addr;
}
i++;
addr = (addr + i) % size;
}
return UNSUCCESS;
}
int main() {
int a[] = { 22, 41, 53, 46, 30, 13, 1, 67 };
int n = sizeof(a) / sizeof(int);
int size = 11;
int H[size];
initHashTable(H, size);
for (int i = 0; i < n; i++) {
insert(H, a[i], size);
}
printf("哈希表中的元素为:\n");
for (int i = 0; i < size; i++) {
if (H[i] != -1) {
printf("%d ", H[i]);
}
}
printf("\n");
return 0;
}
```
运行结果如下:
```
哈希表中的元素为:
1 22 53 67 46 30 13 41
```
其中,哈希表中元素的顺序可能与插入的顺序不同,这是由于开放定址法的冲突处理所导致的。
阅读全文