C++哈希表之线性探测法怎么实现
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,今天小编给大家分享一下C++哈希表之线性探测法怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一
千家信息网最后更新 2025年11月08日C++哈希表之线性探测法怎么实现
今天小编给大家分享一下C++哈希表之线性探测法怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
1、哈希表-线性探测法理论
线性探测法的理论我们在上一篇博客已经阐述了。
现在我们来看看线性探测法的增删查的代码思想:
1.1、哈希表的增加元素
注意:
往后遍历寻找空闲位置的时候,要注意是环形遍历哦!不然访问数组就越界了。
在添加元素,发生位置被占用,即发生哈希冲突后,在向后遍历寻找空闲位置的时候,我们要知道,这个空闲的位置是有两种情况的:
1、这个位置一直是空的,没放过元素。
2、这个位置是空的,以前放过元素,后来被删除了。
1.2、哈希表的查询操作
当用哈希函数计算得出的下标值是3,然后去访问数组,查询时,发现该值不等于要查询的元素的值val,说明当时放val的时候发生了哈希冲突,这时候就要向后遍历了;
访问4下标的时候发现这个位置是空的(空的有两种情况),如果这个位置一直是空的,则就不用继续向后找了,val不存在!因为是线性探测法,所以当时val如果要放的时候肯定是要放在这里的。
但是如果这个位置是空的,但是之前放过元素,后来被删除了,这个位置之前存放了元素,然后val插入的时候,就插到后面的空闲的位置了,所以此时我们还要继续往后遍历寻找val值。
所以我们需要定义一个Bucket节点来表示每一个元素的所有的内容。
//桶的状态enum State{ STATE_UNUSE, //从未使用过的桶 STATE_USING, //正在使用的桶 放着是一个有效的元素,没有被删过 STATE_DEL, //元素被删除了的桶,认为桶里的元素无效了 };//我们删除桶里的元素,并不是真正把值删除掉,而是把桶的状态置为STATE_DEL就认为桶里的元素无效了 //桶的类型struct Bucket{ Bucket(int key = 0, State state = STATE_UNUSE) : key_(key) , state_(state) {} int key_; //存储的数据 State state_; //桶的当前状态};1.3、哈希表的删除操作
2、哈希表-线性探测法代码实现
2.1、素数表中的素数
求素数的代码:(用于素数表中的素数取值)
int main(){ int data = 3; for (int i = data; i < 10000; i++) { int j = 2; for (; j < i; j++) { if (i % j == 0) break; } if (j == i) cout << i << " "; } cout << endl; return 0;}以上就是"C++哈希表之线性探测法怎么实现"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
元素
哈希
位置
线性
探测
时候
素数
知识
空闲
篇文章
代码
内容
状态
查询
C++
情况
数组
理论
冲突
不同
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
原网络安全部队
龙达互联网科技
网络安全考试问答题必备
火柴人觉醒服务器id匹配失败
商场网络安全解决方案
美国的网络技术发展
服务器至强cpu性能排行
一加6电信无法用数据库
国泰安数据库股权性质和国企划分
中国灾害数据库
元宇宙网络安全龙头
网络安全术语介绍
广州工厂配方管理软件开发
计算机网络技术的专业分析
北京小型软件开发服务介绍
sql数据库搬家
怎么把数据库信息全部删掉
软件开发一直不能入门
什么是图片服务器
助力复学复课护苗网络安全课
电力网络安全相关制度
STANDBY下载软件开发
2019企业网络安全报告
奇迹mu怎样找回服务器
怎么关闭夸克网络安全检测
软件开发类人才去哪找
数据库中字段规则
贷款管理服务器哪个好
省文化集团数据库建设
内存数据库加密开源