用C语言编写程序实现哈希查找。
时间: 2024-04-30 11:21:00 浏览: 147
精选_基于C语言的哈希查找的设计与实现_源码打包
哈希查找(Hash Search)又称散列查找,是一种利用哈希函数(Hash Function)实现的高效查找算法。它通过将关键字映射到哈希表(Hash Table)中的位置来实现查找,从而避免了顺序查找带来的低效率问题。以下是使用C语言实现哈希查找的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 20
#define EMPTY -1
#define DELETED -2
int hash(int key) {
return key % MAX_SIZE;
}
int search(int table[], int key) {
int index = hash(key);
int i;
for (i = 0; i < MAX_SIZE; i++) {
if (table[index] == EMPTY) {
return -1;
} else if (table[index] == key) {
return index;
}
index = (index + 1) % MAX_SIZE;
}
return -1;
}
void insert(int table[], int key) {
int index = hash(key);
int i;
for (i = 0; i < MAX_SIZE; i++) {
if (table[index] == EMPTY || table[index] == DELETED) {
table[index] = key;
return;
} else if (table[index] == key) {
return;
}
index = (index + 1) % MAX_SIZE;
}
printf("Error: Hash table overflow!\n");
exit(1);
}
void delete(int table[], int key) {
int index = search(table, key);
if (index != -1) {
table[index] = DELETED;
}
}
void print_table(int table[]) {
int i;
printf("Hash Table: ");
for (i = 0; i < MAX_SIZE; i++) {
if (table[i] == EMPTY) {
printf("- ");
} else if (table[i] == DELETED) {
printf("* ");
} else {
printf("%d ", table[i]);
}
}
printf("\n");
}
int main() {
int table[MAX_SIZE];
int i;
for (i = 0; i < MAX_SIZE; i++) {
table[i] = EMPTY;
}
insert(table, 5);
insert(table, 15);
insert(table, 25);
insert(table, 35);
insert(table, 45);
delete(table, 15);
delete(table, 55);
print_table(table);
return 0;
}
```
在上面的代码中,我们首先定义了哈希表的大小为20(MAX_SIZE=20),并将空位用-1表示(EMPTY=-1),被删除的位置用-2表示(DELETED=-2)。
接着,我们定义了一个哈希函数hash(),该函数将关键字key映射到哈希表中的一个位置。这里我们使用了取模运算(%)来实现哈希函数,这是一种简单而常用的哈希函数。
然后,我们定义了三个基本的哈希表操作:search()、insert()和delete()。其中,search()函数用于在哈希表中查找关键字key,insert()函数用于向哈希表中插入关键字key,delete()函数用于从哈希表中删除关键字key。
最后,我们在main()函数中演示了如何使用哈希表进行查找、插入和删除操作,并输出哈希表的状态。
阅读全文