C语言的hashmap

在算法练习当中,常常会遇到用 hashmap 来实现的思路,通过 key-value 方便快捷的查找,增加,删除特定数据。

在高级语言当中,c++或java都有一套 hashmap API可供使用,但是 C 语言却没有系统的

不过开源项目为我们提供了这套工具,利用这套工具,可以方便的将自定义数据结构 hash 话

官网文档:

uthashicon-default.png?t=M276https://troydhanson.github.io/uthash/userguide.html#_a_hash_in_c

git 仓库

uthashicon-default.png?t=M276https://github.com/troydhanson/uthash        同样包括文档,源码示例等,有兴趣可以细读

示例1:

217. 存在重复元素icon-default.png?t=M276https://leetcode-cn.com/problems/contains-duplicate/这个就可以用来练手,查找一个数是否存在于hash map,没有就新增

struct num_map {
    int val;
    UT_hash_handle hh;
};

bool containsDuplicate(int* nums, int numsSize){
    bool ret = false;
    struct num_map* occur = NULL;

    for(int i=0; i<numsSize; i++)
    {
        struct num_map* tmp = NULL;
        HASH_FIND_INT(occur, &nums[i], tmp);
        if (tmp == NULL) {
            tmp = malloc(sizeof(struct num_map));
            tmp->val = nums[i];
            HASH_ADD_INT(occur, val, tmp);
        } else {
            ret = true;
            break;
        }
    }

    return ret;
}

示例2:

1207. 独一无二的出现次数

更多数据结构算法详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值