用 C 语言写一个哈希表
时间: 2023-02-10 18:31:19 浏览: 79
这是一个使用 C 语言实现哈希表的简单示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TABLE_SIZE 10
typedef struct {
char *key;
char *value;
} HashEntry;
typedef struct {
HashEntry *entry;
} HashTable;
HashTable *create_hash_table() {
HashTable *table = (HashTable *)malloc(sizeof(HashTable));
table->entry = (HashEntry *)malloc(sizeof(HashEntry) * TABLE_SIZE);
for (int i = 0; i < TABLE_SIZE; i++) {
table->entry[i].key = NULL;
table->entry[i].value = NULL;
}
return table;
}
int hash(char *key) {
int sum = 0;
for (int i = 0; i < strlen(key); i++) {
sum += key[i];
}
return sum % TABLE_SIZE;
}
void put(HashTable *table, char *key, char *value) {
int index = hash(key);
while (table->entry[index].key != NULL) {
if (strcmp(table->entry[index].key, key) == 0) {
break;
}
index = (index + 1) % TABLE_SIZE;
}
table->entry[index].key = key;
table->entry[index].value = value;
}
char *get(HashTable *table, char *key) {
int index = hash(key);
while (table->entry[index].key != NULL) {
if (strcmp(table->entry[index].key, key) == 0) {
return table->entry[index].value;
}
index = (index + 1) % TABLE_SIZE;
}
return NULL;
}
int main() {
HashTable *table = create_hash_table();
put(table, "foo", "bar");
put(table, "hello", "world");
printf("%s\n", get(table, "foo"));
printf("%s\n", get(table, "hello"));
return 0;
}
```
这个示例实现了哈希表的基本功能,包括创建哈希表、插入元素、查找元素。这里使用了链地址法来解决冲突。