前面我们学习了许多的线性存储结构,像顺序表,链表,队列等等,现在我们要学习一种全新的离散存储结构------哈希表。
结构图:

原理:通过一个连续的内存空间+hash函数,实现数据的高效查找(O(1))
通过hash函数对数据进行计算,得到存储下标
要素:
1.hash函数:通过特定的算法,对要插入的数据进行计算,得到存储下标
2.hash桶:连续内存中的每一个位置,都称之为桶
3.hash冲突:可能存在多个不同的数据,经过hash计算后得到相同存储位置
设计原则:确定性,均匀性,抗碰撞性,高效性,适应性
常见的典型hash函数:直接定址,除留余数,折叠法,平方取中,多项式
hash冲突:
本质:由于局限性没有完美的哈希函数,任意算法都有可能针对不同的key计算出相同的hash值。
解决:
1.开散列:典型:链地址法
hash桶节点,存放的是链表头指针,链表节点中存放数据,当产生了hash冲突给链表中挂新节点即可。
优化:将链表替换为红黑树(高效查找数据结构)
2.闭散列:也叫开放寻址法(在原有空间的基础上重新找位置)
典型:线性探测法(冲突时挨着向后寻找新位置存放)
线性探测法在删除数据时,比较麻烦,不能直接针对数据进行删除,而是只能标记该位置的数据已被删除
因为需要考虑,可能会有其它该位置的hash冲突数据还存在其它位置
因此只能标记,该位置数据被删除了,而不能表示该位置没有数据
实现:
1.数据结构的定义:
1.桶节点结构:字典型hash表
数据域: key-用于计算hash值 val-实际存储的数据
这种key,val的映射结构,通常被称作为:键值对
指针域:链表执行关系维护
2.hash表结构:
1.hash桶:连续的内存空间,存放桶节点指针(本质就是指针数组)
2.hash表容量:
3.元素数量
4.hash函数
相关操作:初始化,销毁,新增,查找,删除,容量,判空
(代码实现在下一节)
这就是本节课的全部内容,感谢您的观看