解决冲突

#拉链法:遇到冲突就将关键字挂到该位置的关键字的下面

  • 如其名,这很简单,我觉得你甚至可以不看,不过还是放个图
  • Pasted image 20260607133110.png
  • 默认头插法插入,即新插入的元素在链表的首部
  • 当然也能尾插法插入,新插入元素在链表尾部
  • IF 你要是闲得很,写点这个代码也无妨
  • 值得说明的一点就是,分析查找长度时只统计关键字的对比次数,链表空指针的对比次数不计入查找长度
  • #开放定址法:将新元素插入到其余空闲位置

  • 如其名,最常用的法子
  • 原理很简单,就是在冲突位置左右方向找到空位置,然后插入
  • 设一个函数如下图:
  • Pasted image 20260607134153.png
  • 该函数即当发生冲突时对地址进行重构再解的函数
  • 因此衍生出四种常用==探测序列:di=啥==
  • Pasted image 20260607134918.png
  • #线性探测法(最通用)
  • 如上图,一条数组上,加一加一加一,有空就插
  • #平方探测法
  • 如上图,一条数组上,左右横跳加平方,有空就插
  • #双散列探测法
  • 如上图,一条数组上,冲突了的key塞到另一个散列函数里,反复循环,直到有空就插
  • #伪随机序列法
  • 如上图,一条数组上,用设置的伪随机序列进行存储
  • #关于散列表的删除

  • 进行逻辑删除,而非物理删除
  • 逻辑删除:即将该位置标记为空,但实际并不删除该位置的元素
  • 当然,插入新元素时,标记为空的位置是可以被插入的