c语言 ---- HashMap实现

这篇博客介绍了如何在C语言中实现HashMap,包括哈希函数、等价比较函数的定义,以及HashMap的初始化、插入、获取和释放等操作。通过提供的源代码,展示了高效的数据存储和检索方法。
摘要由CSDN通过智能技术生成

   c语言中,关于类似HashTable的实现;

优点:检索/插入/删除高效率;

注意:可存储任意类型的指针(非值存储)

/*************************************************************************

    > File Name: shashmap.h
    > Author: tangzs
    > Mail: 21349338@qq.com
    > Created Time: 2017年09月18日 星期一 22时58分01秒
 ************************************************************************/
#ifndef ____SHASHMAP_H____
#define ____SHASHMAP_H____


/*
 * 求 int 型哈希值
 */
extern unsigned int hashcode_int(void *key);

/*
 * int 型指针比较
 */
extern int equals_int(void *key1, void *key2);

/*
 * 求 string 型哈系值
 */
extern unsigned int hashcode_str(void *key);

/*
 * string 型比较
 */
extern int equals_str(void *key1, void *key2);

/*
 *
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语言中非常常用,可以用于解决快速查找和插入的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值