哈希表(hash table)

哈希表是一种根据关键码去寻找值的数据映射结构,就是key-value键值对结构,能够通过key快速定位到value。key是键,可以为多种类型,类型不一样;value是值,要保存的数据域,可以为结构体或者其他类型。

1.哈希表常用接口

哈希表接口要用到的结构:

#include "uthash.h"struct hashTable{int key;int val;UT_hash_handle hh;
};struct hashTable* hashtable;

(1)查询接口

struct hashTable* find(int ikey){struct hashTable* tmp;HASH_FIND_INT(hashtable, &ikey, tmp);return tmp;
}

(2)插入接口

void insert(int ikey, int ival){struct hashTable* it = find(ikey);if (NULL == it){struct hashTable* tmp = malloc(sizeof(struct hashTable));tmp->key = ikey;tmp->val = ival;HASH_ADD_INT(hashtable, key, tmp);}else {it->val = ival;}
}

(3)删除接口

void delete(int ikey){struct hashTable* tmp = NULL;HASH_FIND_INT(hashtable, ikey, tmp);if (NULL != tmp){HASH_DEL(hashtable, tmp);free(tmp);tmp = NULL;}
}

(4)清空hash table接口

void delete_all(){struct hashTable *currentTable, *tmp;HASH_ITER(hh, hashtable, currentTable, tmp){HASH_DEL(hashtable, currentTable);free(currentTable);currentTable = NULL;}
}

(5)统计hash table中已经存在的元素数

unsigned int elementNum;
elementNum = HASH_COUNT(hashtable);

当然可以通过下面链接获取hash table的源码:

https://github.com/troydhanson/uthash

2.使用实例

给定一个整形数组arr和一个整形目标值target,然后要在该数组arr中找出 和为目标值 的两个整数,并返回它们的数组下标。如,输入arr = [1,4, 7], target = 8;输出[0, 1]。

思路:要快速定位到数组下标,可以使用哈希表的键值结构,key对应数组元素值,value对应数组下标。实现如下:

int* sum(int* arr, int arr_size, int target, int* ret_size){hashtable = NULL;for (int i = 0; i < arr_size; i++){struct hashTable* it = find(target - arr[i]);if (NULL != it){int* ret = malloc(sizeof(int) * 2);ret[0] = i, ret[1] = it->val;*ret_size = 2;}insert(arr[i], i);}*ret_size = 0;return NULL;
}

复杂度分析:

(1)时间复杂度:O(N),其中N是数组中的元素数量,每个元素的查找是以O(1)进行;

(2)空间复杂度:O(N),其中N是数组中的元素数量,主要是哈希表的开销。

2021-01-20 哈希表相关推荐

  1. PowerBI视觉对象共计271组,2021.01.20日更新

    PowerBI视觉对象共计271组,2021.01.20日更新 内容包含导入文件和图标.预览图.文件名一致,在预览图内找到合适的可以直接在视觉对象文件夹搜索 下载地址:点击下载 超便宜 或者复制链接打 ...

  2. 在线CAD平台,MxCAD云图 2021.01.20更新,在线CAD软件

    下载地址: http://www.mxcad.net:2080/MxCADx64Setup(Cloud)(20210120).exe 1. 修改有些图纸剪切,pdf导出看不见内容的问题 2. 在有些图 ...

  3. 哈希表的构造和查找算法

    实现哈希表的构造和查找算法,要求:用除留余数法构造哈希函数,分别用一次探测再散列.二次探测再散列解决冲突. #include<stdio.h> #include<stdlib.h&g ...

  4. 哈希(散列)(三):C语言实现 动态态哈希表

    哈希(散列)的概念: https://blog.csdn.net/mowen_mowen/article/details/82943192 C语言实现:静态哈希表: https://blog.csdn ...

  5. 给定一组查找关键字(19,14,23,1,65,20,84,27,55,11,10,79) 哈希函数为:H(key)=key % 13, 哈希表长为m=15,设每个记录的查找概率相等。【MOOC】

    目   录 题 目①[关键字(19, 14, 23, 1, 65, 20, 84, 27, 55, 11, 10, 79)] 解法一(线性探测再散列) 解法二(链地址法) 题 目②[关键字(19, 1 ...

  6. 使用哈希函数:H(k)=3k MOD 11,并采用链地址法处理冲突。试对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,求等概率情况下查找成功的查找长度,并设计构造哈希表

    使用哈希函数:H(k)=3k MOD 11 ,并采用链地址法处理冲突. 试对关键字序列(22,41,53,46,30,13,01,67)构造哈希表, 求等概率情况下查找成功的查找长度,并设计构造哈希表 ...

  7. 【Leecode笔记】第十五周(下)(12.18-12.20)哈希表专题

    [12.18]-------------------------------------------- [第一题]只出现一次的数字 分析:不需要额外空间的方法,就往位运算上想. //异或 //执行用时 ...

  8. 2021年CCCC天梯赛 L2清点代码库 (哈希表,数据结构)

    分析 2021年CCCC天梯赛的一道问题. 使用一个数据结构存贮所有的数组及其出现的次数. 使用哈希表mp存储数组vector<intvector< int\>vector<i ...

  9. 01两数之和(哈希表)

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一 ...

  10. 【练习】2021下半年数据结构刷题笔记和总结 (二) 树、查找-- 不同的排序算法、二叉排序树 平衡二叉树、哈希表查找、线索二叉树、

    记录自己下半年写题目的记录.题目来自书或者网站. 练习(一)的地址: https://blog.csdn.net/qq_41358574/article/details/117098620?ops_r ...

最新文章

  1. python 回归去掉共线性_一文讲解机器学习算法中的共线性问题
  2. 搭建mongodb分片
  3. c++ :MFC opencv使用namedWindow,imshow出现两个窗口
  4. linux unbuntu屏幕显示不完整,解决 NetBeans 在 Gnome3 显示不全的问题
  5. Ubuntu中文输入法崩溃问题(候选框乱码)
  6. 在iOS中使用FilesApp
  7. mysql导入数据库某张表_MSSQLServer2005 导出导入数据库中某张表的数据
  8. Lightbox JS v2.0
  9. IntelliJ IDEA 设置代码检查级别
  10. 我怎么感觉js快无敌了~
  11. SVG 学习四 基础API
  12. php构造函数连数据库,php 连接数据库的类
  13. 数据库事务及四大特性
  14. 如何舒服地在图书馆用ipad入门深度学习【windows jupyter远程】
  15. python计算复数的辐角_Python 自定义类中的函数和运算符重载
  16. 计算机等级考试陕西省考点名单及报考指南
  17. 安装ubantu-----服务器开发之路1
  18. [转]如何修炼成某一领域的高手?
  19. 微信小程序实战(一)---实现登录界面
  20. Codeforces 777D Cloud of Hashtags(思维 + 暴力)

热门文章

  1. JS简单实现点击复制链接的方法 ------亲测可用
  2. 还有人不知道,加盟连锁店该怎么做?酒店加盟连锁店如何招商?
  3. Vue中v-for必须在vue实例对应元素下的子元素中循环渲染数据
  4. 使用H2Database+Druid连接池+Spring Data JPA+Ehcache实现CRUD操作
  5. Windows-常用快捷键、组合键
  6. 第一行代码android 豆瓣,豆瓣blog » Blog Archive » 豆瓣的初衷
  7. Struts2+Hibernate
  8. 2018TOP100峰会案例征集启动| 共同见证100+精选技术案例的诞生
  9. EOMS未完成工单统计及催单短信自动生成工具
  10. 总结:嵌入式常见的英文单词