哈希表数据结构c语言
时间: 2023-08-26 16:07:32 浏览: 131
哈希表是一种常见的数据结构,用于快速查找和存储键值对。在C语言中,可以使用数组和指针来实现哈希表。
下面是一个简单的示例代码,展示了如何使用哈希表实现插入、查找和删除操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TABLE_SIZE 10
// 哈希表节点结构
typedef struct {
char* key;
int value;
} Node;
// 哈希表结构
typedef struct {
Node** nodes;
} HashTable;
// 创建哈希表
HashTable* createHashTable() {
HashTable* hashTable = (HashTable*)malloc(sizeof(HashTable));
hashTable->nodes = (Node**)malloc(sizeof(Node*) * TABLE_SIZE);
for (int i = 0; i < TABLE_SIZE; i++) {
hashTable->nodes[i] = NULL;
}
return hashTable;
}
// 哈希函数
int hash(char* key) {
int sum = 0;
int length = strlen(key);
for (int i = 0; i < length; i++) {
sum += key[i];
}
return sum % TABLE_SIZE;
}
// 插入键值对到哈希表
void insert(HashTable* hashTable, char* key, int value) {
int index = hash(key);
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->key = key;
newNode->value = value;
hashTable->nodes[index] = newNode;
}
// 查找键对应的值
int find(HashTable* hashTable, char* key) {
int index = hash(key);
Node* node = hashTable->nodes[index];
if (node != NULL && strcmp(node->key, key) == 0) {
return node->value;
}
return -1; // 未找到
}
// 从哈希表中删除键值对
void removeNode(HashTable* hashTable, char* key) {
int index = hash(key);
Node* node = hashTable->nodes[index];
if (node != NULL && strcmp(node->key, key) == 0) {
free(node);
hashTable->nodes[index] = NULL;
}
}
// 销毁哈希表
void destroyHashTable(HashTable* hashTable) {
for (int i = 0; i < TABLE_SIZE; i++) {
Node* node = hashTable->nodes[i];
if (node != NULL) {
free(node);
}
}
free(hashTable->nodes);
free(hashTable);
}
int main() {
HashTable* hashTable = createHashTable();
insert(hashTable, "apple", 10);
insert(hashTable, "banana", 5);
printf("Value for 'apple' is %d\n", find(hashTable, "apple"));
printf("Value for 'banana' is %d\n", find(hashTable, "banana"));
removeNode(hashTable, "apple");
printf("Value for 'apple' after removal is %d\n", find(hashTable, "apple"));
destroyHashTable(hashTable);
return 0;
}
```
这段代码实现了一个简单的哈希表,其中的 `createHashTable()` 函数用于创建哈希表,`insert()` 函数用于插入键值对,`find()` 函数用于查找键对应的值,`removeNode()` 函数用于从哈希表中删除键值对,`destroyHashTable()` 函数用于销毁哈希表。
在这个示例中,哈希表使用了基本的除留余数法作为哈希函数,将字符串的 ASCII 码之和对表大小取余得到索引。每个索引位置存储一个指向节点的指针,节点结构包含键和值。
注意:这只是一个简单的示例,实际应用中可能需要解决冲突、扩容等问题。
阅读全文