一步一步写算法(之hash表)
【 声明:版权全部,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
hash表,有时候也被称为散列表。个人觉得,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,可是数据查找十分麻烦;二叉树中的数据严格有序,可是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,同一时候不占用太多的内容空间,使用也十分方便。
打个比方来说,全部的数据就好像许很多多的书本。假设这些书本是一本一本堆起来的,就好像链表或者线性表一样,整个数据会显得非常的无序和凌乱,在你找到自己须要的书之前,你要经历很多的查询过程;而假设你对全部的书本进行编号,而且把这些书本按次序进行排列的话,那么假设你要寻找的书本编号是n,那么经过二分查找,你非常快就会找到自己须要的书本;可是假设你每个种类的书本都不是非常多,那么你就能够对这些书本进行归类,哪些是文学类,哪些是艺术类,哪些是工科的,哪些是理科的,你仅仅要对这些书本进行简单的归类,那么寻找一本书也会变得非常easy,比方说假设你要找的书是计算机方面的书,那么你就会到工科一类其中去寻找,这样查找起来也会显得麻烦。
不知道这样举例你清楚了没有,上面提到的归类方法事实上就是hash表的本质。以下我们能够写一个简单的hash操作代码。
a)定义hash表和基本数据节点
typedef struct _NODE
{int data;struct _NODE* next;
}NODE;typedef struct _HASH_TABLE
{NODE* value[10];
}HASH_TABLE;
b)创建hash表
HASH_TABLE* create_hash_table()
{HASH_TABLE* pHashTbl = (HASH_TABLE*)malloc(sizeof(HASH_TABLE));memset(pHashTbl, 0, sizeof(HASH_TABLE));return pHashTbl;
}
c)在hash表其中寻找数据
NODE* find_data_in_hash(HASH_TABLE* pHashTbl, int data)
{NODE* pNode;if(NULL == pHashTbl)return NULL;if(NULL == (pNode = pHashTbl->value[data % 10]))return NULL;while(pNode){if(data == pNode->data)return pNode;pNode = pNode->next;}return NULL;
}
d)在hash表其中插入数据
STATUS insert_data_into_hash(HASH_TABLE* pHashTbl, int data)
{NODE* pNode;if(NULL == pHashTbl)return FALSE;if(NULL == pHashTbl->value[data % 10]){pNode = (NODE*)malloc(sizeof(NODE));memset(pNode, 0, sizeof(NODE));pNode->data = data;pHashTbl->value[data % 10] = pNode;return TRUE;}if(NULL != find_data_in_hash(pHashTbl, data))return FALSE;pNode = pHashTbl->value[data % 10];while(NULL != pNode->next)pNode = pNode->next;pNode->next = (NODE*)malloc(sizeof(NODE));memset(pNode->next, 0, sizeof(NODE));pNode->next->data = data;return TRUE;
}
e)从hash表中删除数据
STATUS delete_data_from_hash(HASH_TABLE* pHashTbl, int data)
{NODE* pHead;NODE* pNode;if(NULL == pHashTbl || NULL == pHashTbl->value[data % 10])return FALSE;if(NULL == (pNode = find_data_in_hash(pHashTbl, data)))return FALSE;if(pNode == pHashTbl->value[data % 10]){pHashTbl->value[data % 10] = pNode->next;goto final;}pHead = pHashTbl->value[data % 10];while(pNode != pHead ->next)pHead = pHead->next;pHead->next = pNode->next;final:free(pNode);return TRUE;
}
总结:
1、hash表不复杂,我们在开发中也常常使用,建议朋友们好好掌握;
2、hash表能够和二叉树形成复合结构,至于为什么,建议朋友们好好思考一下?
一步一步写算法(之hash表)相关推荐
- 一步一步写算法(之图结构)
原文:一步一步写算法(之图结构) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 图是数据结构里面的重要一章.通过图,我们可以判断两个点之间是 ...
- 一步一步写算法(之prim算法 中)
原文:一步一步写算法(之prim算法 中) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] C)编写最小生成树,涉及创建.挑选和添加过程 MI ...
- 一步一步写算法(之寻找丢失的数)
一步一步写算法(之寻找丢失的数) 原文:一步一步写算法(之寻找丢失的数) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 假设我们有一个1亿个 ...
- 一步一步写算法(之克鲁斯卡尔算法 中)
一步一步写算法(之克鲁斯卡尔算法 中) 原文:一步一步写算法(之克鲁斯卡尔算法 中) [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前面说到 ...
- 一步一步写算法(之prim算法 下)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前两篇博客我们讨论了prim最小生成树的算法,熟悉了基本的流程.基本上来说,我们是按照自上而下 ...
- 一步一步写算法(开篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 算法是计算机的生命.没有算法,就没有软件,计算机也就成了一个冰冷的机器,没有什么实用价值.很多 ...
- 编程题C语言写牛牛数星星,一步一步写算法(之“数星星”)
原文: 一步一步写算法(之"数星星") [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 学过编程的朋友都知道,当初为了学习 ...
- 一步一步写算法(之排序二叉树删除-1)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 相比较节点的添加,平衡二叉树的删除要复杂一些.因为在删除的过程中,你要考虑到不同的情况,针对每 ...
- 一步一步写算法(之哈希二叉树)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 用过平衡二叉树的朋友都清楚,平衡二叉树的最大优点就是排序.不管是在数据插入的时候还是在数据删除 ...
最新文章
- bootstrap 两个轮播图冲突_Bootstrap的轮播图样式
- Socket网络通讯_TCP协议
- 摆脱困境:将运行时配置作为JSON返回
- Linux静态库和动态库学习总结
- 把一个结构体当做属性后碰到的问题
- 可到了关键部分的作文
- 新型冠状病毒数据抓取及整理详细流程
- 指针变量使用规则实例
- java多线程,java线程同步
- java操作字节码_操作Java字节码
- 给龙芯的OpenJDK8升级
- mysql中url的格式_MySQL JDBC URL中的格式以及参数介绍
- CarMaker入门第二课-创建第一个TestRun
- linux文件复制粘贴权限,Linux 文件特殊权限
- 一键清除失效/删除微博转发微博收藏爬虫
- 正点原子阿波罗STM32F7-红外遥控原理及代码
- “和合信诺”获启赋资本数千万元Pre-A轮融资-专注监管科技、助力金融业落地监管合规最后一公里
- 《OpenDRIVE1.6规格文档》2
- 发自内心的恐惧一个人,怎么做才能坦然面对他?
- java使用循环输出等腰三角
热门文章
- 腾讯发布人工智能辅助翻译,致敬人工翻译
- 前沿地带:从量子计算到量子互联网
- 行业|深度解析:医疗机器人商用要过几道坎
- 谷歌如何利用人工智能重塑美国医疗行业?
- 假如鲁迅是程序员......
- 前 Google 工程师总结的算法面试指南
- 四年磨一剑,机械出身的我是如何拿到蚂蚁金服 Offer 的!
- CSDN 湘苗培优,打造高素质技术人才
- 腾讯发布AR导航,“生态+技术”驱动下一代智能座舱体验跃迁
- ISP PIPLINE (九_1) Denoise 之 space domain denoise