c语言哈希表的建立与查找
时间: 2023-08-15 10:17:14 浏览: 90
C语言设计哈希表实现图书查找
好的,下面是一个简单的哈希表实现,包括建立和查找操作。以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 10
typedef struct _hash_node {
char *key;
int value;
struct _hash_node *next;
} HashNode;
typedef struct _hash_table {
HashNode *table[MAX_SIZE];
} HashTable;
unsigned int hash_function(const char *key) {
unsigned int hash = 0;
for (int i = 0; i < strlen(key); i++) {
hash = hash * 31 + key[i];
}
return hash % MAX_SIZE;
}
HashNode *create_node(const char *key, int value) {
HashNode *new_node = (HashNode *) malloc(sizeof(HashNode));
new_node->key = strdup(key);
new_node->value = value;
new_node->next = NULL;
return new_node;
}
void insert(HashTable *hash_table, const char *key, int value) {
unsigned int hash = hash_function(key);
HashNode *node = hash_table->table[hash];
while (node != NULL) {
if (strcmp(node->key, key) == 0) {
node->value = value; // replace value
return;
}
node = node->next;
}
HashNode *new_node = create_node(key, value);
new_node->next = hash_table->table[hash];
hash_table->table[hash] = new_node;
}
int get(HashTable *hash_table, const char *key) {
unsigned int hash = hash_function(key);
HashNode *node = hash_table->table[hash];
while (node != NULL) {
if (strcmp(node->key, key) == 0) {
return node->value;
}
node = node->next;
}
return -1; // key not found
}
int main() {
HashTable hash_table;
memset(&hash_table, 0, sizeof(HashTable));
insert(&hash_table, "apple", 1);
insert(&hash_table, "banana", 2);
insert(&hash_table, "orange", 3);
printf("%d\n", get(&hash_table, "apple")); // 输出 1
printf("%d\n", get(&hash_table, "banana")); // 输出 2
printf("%d\n", get(&hash_table, "orange")); // 输出 3
printf("%d\n", get(&hash_table, "watermelon")); // 输出 -1
return 0;
}
```
在上面的代码中,我们使用哈希函数将键映射到哈希表中的索引位置,然后使用链表方法解决哈希冲突。`create_node`函数用于创建哈希表中的节点,`insert`函数用于将键和值插入哈希表中,如果哈希表中已经存在该键,则更新其对应的值;`get`函数用于根据键查找哈希表中的值。
注意:在实际使用中,我们需要处理哈希冲突,这里使用了链表法,可以有效地解决冲突问题。
下面是一个使用示例:
```
1
2
3
-1
```
在上面的示例中,我们创建了一个哈希表,并向其中插入了三个键值对。然后我们使用`get`函数来查找键对应的值。如果键不存在于哈希表中,则返回-1。
阅读全文