用C语言编写程序实现哈希查找。
时间: 2024-04-30 15:24:47 浏览: 49
哈希查找是一种高效的查找算法,可以在平均情况下实现O(1)的时间复杂度。下面是用C语言实现哈希查找的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define TABLE_SIZE 1000 // 哈希表大小
#define EMPTY_KEY -1 // 空键值
#define DELETED_KEY -2 // 删除键值
// 哈希表结构体
typedef struct {
int key;
int value;
} Entry;
// 哈希表初始化
void initTable(Entry* table, int size) {
for (int i = 0; i < size; i++) {
table[i].key = EMPTY_KEY;
table[i].value = 0;
}
}
// 哈希函数
int hash(int key) {
return key % TABLE_SIZE;
}
// 插入键值对
void insert(Entry* table, int key, int value) {
int index = hash(key);
while (table[index].key != EMPTY_KEY && table[index].key != DELETED_KEY) {
index = (index + 1) % TABLE_SIZE;
}
table[index].key = key;
table[index].value = value;
}
// 查找键值对
int search(Entry* table, int key) {
int index = hash(key);
while (table[index].key != EMPTY_KEY) {
if (table[index].key == key) {
return table[index].value;
}
index = (index + 1) % TABLE_SIZE;
}
return -1; // 没有找到
}
// 删除键值对
void delete(Entry* table, int key) {
int index = hash(key);
while (table[index].key != EMPTY_KEY) {
if (table[index].key == key) {
table[index].key = DELETED_KEY;
return;
}
index = (index + 1) % TABLE_SIZE;
}
}
int main() {
Entry table[TABLE_SIZE];
initTable(table, TABLE_SIZE);
insert(table, 1, 10);
insert(table, 2, 20);
insert(table, 3, 30);
printf("%d\n", search(table, 1));
printf("%d\n", search(table, 2));
printf("%d\n", search(table, 3));
printf("%d\n", search(table, 4));
delete(table, 2);
printf("%d\n", search(table, 2));
return 0;
}
```
在上面的代码中,我们定义了一个Entry结构体表示哈希表中的一个键值对。在哈希表初始化时,我们把所有的键值对的键值都设为EMPTY_KEY。在插入键值对时,我们首先计算键值的哈希值,然后遍历哈希表,直到找到一个空槽位或者已经存在该键值对的键值。在查找键值对时,我们也是先计算哈希值,然后遍历哈希表,直到找到该键值对或者遇到一个空槽位。在删除键值对时,我们把该键值对的键值设为DELETED_KEY。注意,删除操作并不真正地删除键值对,而是标记为已删除,以防止影响到之前的哈希值计算结果。
阅读全文