解决冲突
#拉链法:遇到冲突就将关键字挂到该位置的关键字的下面
如其名,这很简单,我觉得你甚至可以不看,不过还是放个图
默认头插法插入,即新插入的元素在链表的首部
当然也能尾插法插入,新插入元素在链表尾部
IF 你要是闲得很,写点这个代码也无妨
值得说明的一点就是,分析查找长度时只统计关键字的对比次数,链表空指针的对比次数不计入查找长度
#开放定址法:将新元素插入到其余空闲位置
如其名,最常用的法子
原理很简单,就是在冲突位置左右方向找到空位置,然后插入
设一个函数如下图:
该函数即当发生冲突时对地址进行重构再解的函数
因此衍生出四种常用==探测序列:di=啥==
#线性探测法(最通用)
如上图,一条数组上,加一加一加一,有空就插
#平方探测法
如上图,一条数组上,左右横跳加平方,有空就插
#双散列探测法
如上图,一条数组上,冲突了的key塞到另一个散列函数里,反复循环,直到有空就插
#伪随机序列法
如上图,一条数组上,用设置的伪随机序列进行存储
#关于散列表的删除
进行逻辑删除,而非物理删除
逻辑删除:即将该位置标记为空,但实际并不删除该位置的元素
当然,插入新元素时,标记为空的位置是可以被插入的