散列表的开放定址法以及再散列法(C语言)

Posted bfhonor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了散列表的开放定址法以及再散列法(C语言)相关的知识,希望对你有一定的参考价值。

(一)处理冲突的方法——开放定址法

  • 所谓开放定址法,是指可存放新表项的空闲地址既向它的同义词表项开放,又向它的非同义词表项开放。其数学递推公式为:

1. 线性探测法

(1)插入操作










(2)查找操作




(3)删除操作


❗❗❗❗❗❗

  • 注意:采用“开放定址法”时,删除结点不能简单地将被删结点的空间置为空,否则将截断在它之后填入散列表的同义词结点的查找路径,可以做一个“删除标记”,进行逻辑删除

❗❗❗❗❗❗





  • 线性探测法很容易造成同义词、非同义词的“聚集(堆积)”现象,严重影响查找效率
  • 产生原因——冲突后再探测一定是放在某个连续的位置

2. 平方探测法

(1)插入操作


  • 注意负数的模运算,(-3)%27 = 24,而不是3
    《数论》中模运算的规则:a MOD m == (a+km) MOD m , 其中,k为任意整数

(2)查找操作

  • 平方探测法:比起线性探测法更不易产生“聚集(堆积)”问题

3. 伪随机序列法

(二)处理冲突的方法——再散列法

以上是关于散列表的开放定址法以及再散列法(C语言)的主要内容,如果未能解决你的问题,请参考以下文章

下面不属于针对散列表构造中的冲突处理的方式是( )(分段叠加法)

下面不属于针对散列表构造中的冲突处理的方式是( )(分段叠加法)

散列表解决冲突的方式

算法小讲堂之哈希表|散列表|考研笔记

数据结构--开放定址法解决散列冲突时几种探测法的比较

散列表常见散列函数及处理冲突的方法