哈希表
哈希表
哈希表,也叫散列表,它是基于快速存取的角度设计的,是一种典型的“空间换时间”的做法。它可以提供快速地插入和查找操作。
哈希表函数的构造方法
直接定址法
除留余数法
数字分析法
设关键码集合中,每个关键码均由
平方取中法
对关键码平方后,按哈希表大小,取中间的若干位作为哈希地址。
处理冲突的方法
开放寻址法
,称线性探测再散列; 称二次探测再散列; 伪随机数序列,称伪随机探测再散列。
再散列法
链地址法(拉链法)
当存储结构是链表时,多采用拉链法。用拉链法处理冲突的办法是:把具有相同散列地址的关键字(同义词)值放在同一链表中,称为用一次链表。有 T[0...m - 1]
存放各个链表的头指针,凡事散列地址为 T[i]
为指针的单链表中。
建立一个公共溢出区
设哈希函数产生的哈希地址集为ElemType baseTbl[m]
;每个单元只能放一个元素;一个溢出表ElemType overTbl[k]
;只要关键码对应的哈希地址在基本表上产生冲突,则所有这样的原色一律存入该表中。
哈希表的查找
- 理想情况下我们根据关键字 key, 通过造表时候的哈希函数求得哈希地址,该表此位置上的记录的关键字与我们给定的关键字 key 相等,则查找成功。
- 但是如果有冲突,即该表此位置上的记录不是我们要查找的记录,则根据造表时候设定的冲突处理方法寻找“下一个地址”,一直到哈希表的某一个位置为“空”或者表中记录的关键字为我们给定的关键字 key。
哈希表
https://silhouettesforyou.github.io/2021/11/08/f312d56c7828/