哈希表及其查找

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

云南大学数学与统计学实验教学中心

实验报告

一、实验目的

通过实验掌握散列存储的基本概念,进行哈希问题的处理,同时附带进行字符串的处理的练习。

二、实验内容

为某单位的人名(n=30人)设计一个哈希表,使得平均查找长度<2,要求完成相应的哈希建表和查表。。

三、实验环境

Windows XP

程序设计语言C

四、实验过程

1.实验要求:

1、设人名长度<10个字符,用二维字符数组存储哈希表:char hash[ ][10];

2、要求哈希函数用除留余数法,并用人名的10个字符代码和作为分子;

用(补偿性)线性探测再散列处理冲突。

3、依题意有:平均查找长度=(1+1/(1-α))/2< 2,∴取α=0.6,

由此哈希表长m=n/α=30/0.6=50; 所以有char hashlist [ 50][10];

令:除留余数法中的P取47;

(补偿性)线性探测再散列的地址:j=(j+Q)% m中的Q取17。

4、对程序结构的要求:

①要求为哈希建表和哈希查表分别编写和设计相应的函数:

createhash( ... ... ); hashsearch(... ...);

②再设计一个哈希函数表的输出函数printhash( ),对构造的哈希表进行输出,注

意输出格式要在屏幕好看,先输出序号(1~30),再输出该序号

的人名或null,每行输出10项,共输出5行。

③还应有一个初始化char hashlist [ 50][10]的函数Inithashlist( ),

初始时将50个人名全赋值为null.

5、在主函数中:

调用Inithashlist( )初始化哈希表;

调用createhash( hashlist,30 )构造哈希表;

调用printhash( )输出所建立的哈希表;

接受待查找人名到字符数组name[ ];

调用hashsearch(hashlist,name )进行查找,若查到显示"found!"并显示

人名在数组中的序号;若未查到显示"no found!"

[测试数据]:健表时输入以下数据:

January February march april may june july august september

October November December

Sunday Monday Tuesday wednesday thurday f riday Saturday

One two three four five six serve eight nine ten data

[实现提示]:

参照杨秀清主编《数据结构》西安电子科技大学出版社P171。

[附加要求]:

1.在哈希查表时考虑插入。当查找失败,且查找时的冲突次数<规定数字(如表长之半)时插入待查找的字符串,并给出“已插入”的显示;

2.在哈希查表时考虑删除。接受待删除人名到字符数组name[ ];在hash表中找到,并删除之。须注意,删除后不能影响以后的查找。

2.实验设计的(各)流程图:(以下内容请同学认真填写)

3.程序设计的关键代码及解释:(注意对程序代码给出必要的注解,保证可读性)

4.实验(程序运行)结果的粘贴:(必需是你的程序运行结果)

五、实验总结

1.遇到的问题及分析:(请结合你的试验过程认真总结)

2.解决方案(列出遇到的问题和解决办法,列出没有解决的问题):

3.体会和收获。

六、参考文献

《数据结构C语言版》严蔚敏、吴伟民编著清华大学出版社出版(国家级规划教材)《数据结构题集C语言版》严蔚敏、吴伟民编著清华大学出版社出版

《数据结构》扬秀金西安电子科技大出版社(高等学校电子信息类教材)

《数据结构实用教程C/C++描述》徐孝凯编著清华大学出版社出版

《数据结构》许卓群、张乃孝等编著高等教育出版社出版

《算法与数据结构》付清祥、王小东编著电子工业出版社出版

《数据结构极其应用教程》严蔚敏、陈文博编著清华大学出版社出版

七、教师评语:

相关文档
最新文档