数据结构(C++版)(第二版)教学课件李根强第08章.pptVIP

  • 0
  • 0
  • 约2.3万字
  • 约 80页
  • 2019-10-08 发布于广东
  • 举报

数据结构(C++版)(第二版)教学课件李根强第08章.ppt

8.4.3 解决冲突的方法 由于散列存储中选取的散列函数不是线性函数,故不可避免地会产生冲突,下面给出常见的解决冲突的方法。 1.开放定址法 开放定址法就是从发生冲突的那个单元开始,按照一定的次序,从散列表中找出一个空闲的存储单元,把发生冲突的待插入关键字存储到该单元中,从而解决冲突的发生。 在开放定址法中,散列表中的空闲单元(假设地址为K)不仅向散列地址为K的同义词关键字开放,即允许它们使用,而且还向发生冲突的其他关键字开放(它们的散列地址不为K),这些关键字称为非同义词关键字。 例如,设有关键字序列14,27,40,15,16,散列函数为H(k)=k%13,则14,27,40的散列地址都为1,因此发生冲突,即14,27,40互为同义词,这时,假设处理冲突的方法是从冲突处顺序往后找空闲位置,找到后放入冲突数据即可。则14放入第1个位置,27只能放入第2个位置,40就只能放入第3个位置,接着往后有关键字15,16要放入散列表中,而15,16的散列地址分别为2和3,即15应放入第2个位置,16应放入第3个位置,而第2个位置已放入了27,第3个位置已放入了40,故也发生冲突,但这时是非同义词冲突,即15和27、16和40相互之间是非同义词。这时,解决冲突后,15应放入第4个位置,16应放入第5个位置。因此,在使用开放定址法处理冲突的散列表中,地址为K的单元到底存储的是同义词中的一

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档