【数据结构基础】散列表存储

本文介绍了散列表的基础概念,包括除留余数法和平方取中法两种构造方法。详细讨论了冲突解决策略,如线性再探测、随机再探测和再哈希,并提到了链地址法和公共溢出区法这两种不同的实现方式。最后进行了小结,总结了散列表的关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础概念

       和顺序表一样,散列表也是用来存储数据的;和顺序表不同的是,散列表优化了查找数据的操作,使得在对通过散列表进行存储的数据进行查找的开销大大降低。在散列表中,我们用键值指代我们需要进行保存的数据,用散列地址表示存储的位置,用散列函数指代通过键值确定存储位置或者通过存储位置确定键值的映射关系(散列)。

构造方法

       我们在进行散列函数的构造时,需要考虑将需要存储的数据均匀的分配到存储地址中,避免出现冲突。冲突是两个及两个以上的数据的存储位置相同的一种现象,这些相同的数据我们称之为相对于该散列函数的同义词。下面简单介绍几种常用的构造方法供大家参考。

除留余数法

       除留余数法就是选取一个不大于表长的数值p做被除数,然后将带存储的数据依次除以这个数值p,取运算的余数作为该数值在散列表中的存储位置。这种方法产生冲突的原因是p值选取的不恰当,使得存储数据中一个以上的数据除以p后产生的余数一样,导致存储位置相同。一个比较好的解决办法是在选取p值时,要选取小于表长的最大质数,这样能把余数相同的风险降低到最小。

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值