c语言 hashmap实现
时间: 2023-09-03 21:01:54 浏览: 121
C语言实现hashMap
4星 · 用户满意度95%
C语言的哈希表(hashmap)可以通过数组和链表的结合实现。
首先,我们需要定义一个结构体来表示哈希表的节点,包含一个键和一个值。例如:
```
typedef struct Node {
int key;
int value;
struct Node* next;
} Node;
```
接下来,我们需要定义一个数组作为哈希表的桶(bucket),桶的数量通常选择为一个质数,以减少冲突的概率。例如:
```
#define BUCKET_SIZE 100
// 创建一个指向Node指针数组的指针
Node** hashMap = NULL;
// 初始化哈希表
void init() {
hashMap = (Node**)malloc(BUCKET_SIZE * sizeof(Node*));
for (int i = 0; i < BUCKET_SIZE; i++) {
hashMap[i] = NULL;
}
}
```
为了实现哈希函数,我们可以使用取余操作符(%),将键映射到桶的索引上。例如,我们可以使用键的整数值除以桶的大小,并取余运算来计算索引:
```
int hash(int key) {
return key % BUCKET_SIZE;
}
```
接下来,我们可以实现插入和查找操作。
插入操作首先需要先检查键是否存在于哈希表中,如果存在,则更新值;如果不存在,则创建新节点,并将节点添加到对应桶的链表上。例如:
```
void insert(int key, int value) {
int index = hash(key);
Node* node = hashMap[index];
// 查找节点
while (node != NULL) {
if (node->key == key) {
node->value = value; // 更新值
return;
}
node = node->next;
}
// 创建新节点
node = (Node*)malloc(sizeof(Node));
node->key = key;
node->value = value;
node->next = hashMap[index];
hashMap[index] = node;
}
```
查找操作首先计算键的哈希值,并遍历对应桶上的链表,直到找到与给定键相等的节点或链表末尾。例如:
```
int get(int key) {
int index = hash(key);
Node* node = hashMap[index];
// 查找节点
while (node != NULL) {
if (node->key == key) {
return node->value; // 返回值
}
node = node->next;
}
return -1; // 没有找到
}
```
此外,我们还可以实现删除操作和释放内存的函数,确定哈希表是否需要动态调整大小等。
以上就是C语言实现哈希表的简单示例。哈希表在C语言中非常常用,可以用于解决快速查找和插入的问题。
阅读全文