用名单设计一个哈希表c语言
时间: 2023-08-15 20:27:43 浏览: 100
在 C 语言中,可以使用结构体和链表来设计哈希表。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TABLE_SIZE 10
// 定义哈希表节点
typedef struct Node {
char *key;
char *value;
struct Node *next;
} Node;
// 定义哈希表
typedef struct {
Node *nodes[TABLE_SIZE];
} HashTable;
// 哈希函数
int hash(char *key) {
int sum = 0;
for (int i = 0; i < strlen(key); i++) {
sum += key[i];
}
return sum % TABLE_SIZE;
}
// 插入节点到哈希表
void insert(HashTable *table, char *key, char *value) {
int index = hash(key);
Node *node = (Node *) malloc(sizeof(Node));
node->key = key;
node->value = value;
node->next = NULL;
if (table->nodes[index] == NULL) {
table->nodes[index] = node;
} else {
Node *temp = table->nodes[index];
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = node;
}
}
// 从哈希表中查找节点
char *lookup(HashTable *table, char *key) {
int index = hash(key);
Node *node = table->nodes[index];
while (node != NULL) {
if (strcmp(node->key, key) == 0) {
return node->value;
}
node = node->next;
}
return NULL;
}
int main() {
// 初始化哈希表
HashTable table;
for (int i = 0; i < TABLE_SIZE; i++) {
table.nodes[i] = NULL;
}
// 插入节点到哈希表
insert(&table, "apple", "a fruit");
insert(&table, "banana", "another fruit");
insert(&table, "cat", "an animal");
insert(&table, "dog", "another animal");
// 查找节点
printf("%s\n", lookup(&table, "apple"));
printf("%s\n", lookup(&table, "banana"));
printf("%s\n", lookup(&table, "cat"));
printf("%s\n", lookup(&table, "dog"));
printf("%s\n", lookup(&table, "elephant"));
return 0;
}
```
以上代码实现了一个简单的哈希表,使用字符串作为键和值。每个节点包含一个键、一个值和一个指向下一个节点的指针。插入节点时,通过哈希函数计算出键的哈希值,然后将节点插入到相应的链表中。查找节点时,同样通过哈希函数计算出键的哈希值,然后遍历相应的链表,查找键值匹配的节点。
阅读全文