key_lab13.哈希表查找

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十三哈希表(散列表)查找
一、实验目的
1.进一步理解散列存储原理;
2.掌握在散列表中插入数据和查找数据的方法;
3.会用不同的处理冲突方法建立散列表;
4.了解在散列表中删除数据的方法。

二、实验环境
Windows 2000以上版本的操作系统,Visual C++ 6.0版编程环境。

三、实验内容和步骤
hash工程文件说明:
ArrayHash.h和ArrayHash.cpp分别是采用开放定址法处理冲突的散列表抽象数据类型头文件和实现源代码;
LinkHash.h和LinkHash.cpp分别是链地址法处理冲突的散列表抽象数据类型头文件和实现源代码;
Hash.h和Hash.cpp分别是散列表长度、特殊标志和哈希函数、处理冲突函数的头文件和实现源代码。

1.已知散列表长11,地址区间为0~10,给定关键字序列(20,30,70,15,8,12,
18,63,19)。

设哈希函数为h(k)=k%11,分别采用线性探查法和链地址法处理冲突,构造散列表。

要求写出各自的计算过程并画出对应的散列表。

解题方法及步骤请参考本次实验的PPT第1至第3页。

【重点】(额外参考内容:课本P266 例9.9 与课本P268例9.10。

程序参考:课本P268-P270)
2.已知哈希函数为H(k)=k%11,线性探测法解决冲突,根据散列表的状态图,完成下
面问题,并写出过程及结果。

1)在上述散列表的状态图中,在空位置上设置空标志NULLFLAG,并查找45;
H1 =(H(45)+1)%11=2,占用;
H2 =(H(45)+2)%11=3,查找成功。

2)查找5,若5不存在,则将其插入;
H(5)=5%11=5,地址被占用,线性探查下一地址;
H1 =(H(5)+1)%11=6,占用;
H2 =(H(5)+2)%11=7,占用;
3)查找26,若26存在,则将其删除,并在相应位置设置删除标志DELETEFLAG;
H(26)=26%11=4,地址被占用,线性探查下一地址;
H1 =(H(26)+1)%11=5,占用;
4)查找5,若5存在,则将其删除;
H(5)=5%11=5,地址被占用,线性探查下一地址;
H1 =(H(5)+1)%11=6,删除标志,继续探查;
H2 =(H(5)+2)%11=7,占用;
5)查找10,若10不存在,则将其插入;
H(10)=10%11=10,地址被占用,线性探查下一地址;
6)查找27,若27不存在,则将其插入;
H(27)=27%11=5,地址被占用,线性探查下一地址;
H1 =(H(27)+1)%11=6,删除标志,继续探查;
H2 =(H(27)+2)%11=7,占用;
H3 =(H(27)+3)%11=8,删除标志,继续探查;
H4 =(H(27)+4)%11=9,占用;
H5 =(H(27)+5)%11=10,占用;
H6 =(H(27)+6)%11=0,占用;
H7 =(H(27)+7)%11=1,占用;
H8 =(H(27)+8)%11=2,占用;
H9 =(H(27)+9)%11=3,占用;。

总结查找、删除、插入操作成功与失败的条件,并在hash工程中利用my_hash1验
证上述过程。

3.在hash工程中利用my_hash2验证上述过程。

回答以下问题:
1)通过my_hash1和my_hash2能否直接判断同义词存在。

答:my_hash1不可以判断出同义词。

因为开放定址法处理冲突,使到同义词可能分散在数组的不同位置,无法判断。

my_hash2 可以判断出同义词。

因为同义词在其相应位置使用链表链接起来了。

2)对比链地址法解决冲突时,散列表的查找、删除、插入等操作与第2题开放地址
法解决冲突的区别。

相关文档
最新文档