哈希表c语言实现代码
时间: 2023-12-20 22:31:08 浏览: 117
以下是一个简单的哈希表C语言实现代码,使用链地址法解决哈希冲突:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define HASHSIZE 12
#define NULLKEY -32768
typedef struct {
int *elem; // 数据元素存储基址,动态分配数组
int count; // 当前数据元素个数
} HashTable;
int InitHashTable(HashTable *H) {
int i;
H->count = HASHSIZE;
H->elem = (int *)malloc(HASHSIZE * sizeof(int));
for (i = 0; i < HASHSIZE; i++) {
H->elem[i] = NULLKEY;
}
return 1;
}
int Hash(int key) {
return key % HASHSIZE; // 散列函数采用除留余数法
}
void InsertHash(HashTable *H, int key) {
int addr = Hash(key); // 求哈希地址
while (H->elem[addr] != NULLKEY) { // 如果不为空,则冲突
addr = (addr + 1) % HASHSIZE; // 开放定址法的线性探测
}
H->elem[addr] = key; // 直到有空位后插入关键字
}
int SearchHash(HashTable H, int key) {
int addr = Hash(key); // 求哈希地址
while (H.elem[addr] != key) { // 如果不相等,则冲突
addr = (addr + 1) % HASHSIZE; // 开放定址法的线性探测
if (H.elem[addr] == NULLKEY || addr == Hash(key)) { // 如果循环回到原点或者遇到空位,则说明关键字不存在
return -1;
}
}
return addr; // 找到关键字,返回其地址
}
int main() {
HashTable H;
int i, key, result;
InitHashTable(&H);
printf("请输入%d个数:\n", HASHSIZE);
for (i = 0; i < HASHSIZE; i++) {
scanf("%d", &key);
InsertHash(&H, key);
}
printf("哈希表中的数据为:\n");
for (i = 0; i < HASHSIZE; i++) {
printf("%d ", H.elem[i]);
}
printf("\n请输入要查找的数:\n");
scanf("%d", &key);
result = SearchHash(H, key);
if (result == -1) {
printf("没有找到%d\n", key);
} else {
printf("%d的位置是%d\n", key, result);
}
return 0;
}
```
阅读全文
相关推荐
![.zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)