<CPP>哈希思想,哈希表构造
哈希通常被称为散列或杂凑,并可音译为HASH。
将任何长度的数据经过散列算法处理生成固定长度的结果。
这个结果称为哈希值(Hash Value)。
哈希
-
-
哈希概念
-
哈希函数
-
插入及搜索元素
-
哈希冲突
-
闭散列
-
- 线性探测
-
开散列
-
哈希概念
构造一种储存结构,通过某种函数,使得其元素的储存位置与他的关键码之间能够建立一一映射关系,那么在查找时通过该函数很快找到相应元素
简言之,就是设定某一固定函数(hashFunc),通过此函数来使插入元素的值与元素位置相对应,往后我们需要查找此元素时就可以通过此函数(hashFunc)找到该值
哈希函数
另一种名称是哈希算法。(英语:Hash algorithm)
哈希函数使得计算出来的地址均匀分布在整个空间
插入及搜索元素
通过待插入的元素的关键码及相应的哈希函数计算其存储位置。
该哈希函数采用除留余数法进行介绍。
例如: 现有数字1、3、4、5、6、9用于演示。将n对10取模得到的余数作为哈希地址完成元素插入操作。

为了查找某一元素,则可以对查找元素应用哈希函数进行计算以确定存储位置,并实现该元素的查找。
哈希冲突
当尝试向内存中插入一个新元素时(...),如果该哈希函数计算出的内存地址已经被其他元素占据(则这种情况)被称为哈希冲突()。

闭散列
闭散列法亦称开放定址法,在哈希冲突发生时,若哈希表尚未填满,则将产生冲突的元素从其碰撞位置依次向前移动至发现空闲位置后进行插入
线性探测
以线性探测举例

为了能更好的识别当前位置是否被占用,我们需要对每个位置进行标记
enum state{EMPTY,FULL,DELETE};
代码解释
为了避免在执行删除操作时导致数据完整性受到影响,请确保您在进行元素移除操作前先将其标记为已移除的状态。

开散列
开放散列采用链地址法进行冲突处理策略。具体而言,在数据结构中使用哈希函数将关键码集合映射至对应的哈希地址空间。当多个关键码被映射到同一哈希地址时,则需将这些元素组织成单链表结构,并将这些单链表的头节点存储于原始的哈希表中以实现高效的冲突解决机制

