哈希表及其查找
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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++描述》徐孝凯编著清华大学出版社出版
《数据结构》许卓群、张乃孝等编著高等教育出版社出版
《算法与数据结构》付清祥、王小东编著电子工业出版社出版
《数据结构极其应用教程》严蔚敏、陈文博编著清华大学出版社出版
七、教师评语: