哈希表格实验报告计划版

上传人:碎****木 文档编号:220863302 上传时间:2021-12-09 格式:DOCX 页数:15 大小:34.16KB
返回 下载 相关 举报
哈希表格实验报告计划版_第1页
第1页 / 共15页
哈希表格实验报告计划版_第2页
第2页 / 共15页
哈希表格实验报告计划版_第3页
第3页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《哈希表格实验报告计划版》由会员分享,可在线阅读,更多相关《哈希表格实验报告计划版(15页珍藏版)》请在金锄头文库上搜索。

1、.试验报告 姓名: 学号: 1试验题目针对某个集体中人名设计一个哈希表, 使得平均查找长度不超过 R,并完成相应的建表和查表程序。根本要求:假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30 个,取平均查找长度的上限为 2。哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。2需求分析本演示程序用 VC 编写,完成哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。输出形式:地址,关键字,收索长度, Hkey,拼音3.概要设计typedefstructNAME typedefstructhterm voidInitNameList() voidCreateH

2、ashList() voidFindList()voidDisplay() intmain()4. 具体设计#include #include #include #defineHASH_LEN50 #defineM47 #defineNAME_NO8 typedefstructNAMEchar*py;/名字的拼音intk;/拼音所对应的整数NAME;NAMENameListHASH_LEN;typedefstructhterm/哈希表char*py;/名字的拼音intk;/拼音所对应的整数intsi; /查找长度HASH;HASHHashListHASH_LEN;”.1 / 121.voidI

3、nitNameList()NameList0.py=“houxinming“; NameList1.py=“abc“; NameList2.py=“defdgf“; NameList3.py=“zhangrji“; NameList4.py=“jiaxin“; NameList5.py=“xiaokai“; NameList6.py=“liupeng“; NameList7.py=“shenyonghai“;char*f; intr,s0;for(inti=0;iNAME_NO;i+)/ 求出各个姓名的拼音所对应的整数 s0=0;f=NameListi.py;for(r=0;*(f+r)!=”

4、0”;r+)/ 方法:将字符串的各个字符所对应的所得的整数做为哈希表的关键字s0=*(f+r)+s0;NameListi.k=s0;voidCreateHashList()for(inti=0;iHASH_LEN;i+)/哈希表的初始化HashListi.py=“; HashListi.k=0; HashListi.si=0;for(i=0; iNAME_NO;)intsum=0;intadr=(NameListi.k)%M;/哈希函数intd=adr;if(HashListadr.si=0) /假设不冲突HashListadr.k=NameListi.k;ASCII 码相加,”.2 / 12

5、2.HashListadr.py=NameListi.py; HashListadr.si=1;else / 冲突dod=(d+(NameListi.k)%10+1)%M; /伪散列sum=sum+1;/查找次数加1while(HashListd.k!=0);HashListd.k=NameListi.k; HashListd.py=NameListi.py; HashListd.si=sum+1;i+;void FindList()printf(“nn 请输入姓名的拼音:“); /输入姓名charname20=0;scanf(“%s“,name);ints0=0;for(intr=0;r20

6、;r+) / 求出姓名的拼音所对应的整数(关键字) s0+=namer;intsum=1;intadr=s0%M; / 使用哈希函数intd=adr;if(HashListadr.k=s0) /分 3 种状况进展推断printf(“n姓名:%s 关键字:%d查找长度为:1“,HashListd.py,s0); elseif(HashListadr.k=0)printf(“无该记录!“); elseintg=0; dod=(d+s0%10+1)%M; / 伪散列sum=sum+1; if(HashListd.k=0)”.3 / 123.printf(“无记录!“); g=1;if(HashLis

7、td.k=s0)printf(“n 姓名:%s 关键字:%d 查找长度为:%d“,HashListd.py,s0,sum);g=1;while(g=0);voidDisplay()printf(“nn地址t 关键字tt 搜寻长度tH(key)tt拼音for(inti=0;i15;i+)printf(“%d“,i); printf(“t%d“,HashListi.k); printf(“tt%d“,HashListi.si); printf(“tt%d“,(HashListi.k)%M); printf(“t%s“,HashListi.py); printf(“n“);for(i=15;i30;

8、i+)printf(“%d“,i); printf(“t%d“,HashListi.k); printf(“tt%d“,HashListi.si); printf(“tt%d“,(HashListi.k)%M); printf(“t%s“,HashListi.py); printf(“n“);for(i=30;i40;i+)printf(“%d“,i); printf(“t%d“,HashListi.k); printf(“tt%d“,HashListi.si); printf(“tt%d“,(HashListi.k)%M); printf(“t%s“,HashListi.py); print

9、f(“n“);”.4 / 124n“);/显示的格式.for(i=40;i50;i+)printf(“%d“,i); printf(“t%d“,HashListi.k); printf(“tt%d“,HashListi.si); printf(“tt%d“,(HashListi.k)%M); printf(“t%s“,HashListi.py); printf(“n“);floataverage=0; for(i=0;iHASH_LEN;i+) average+=HashListi.si; average/=NAME_NO;printf(“nn平均查找长度: ASL(%d)=%fnn“,NAM

10、E_NO,average);intmain()printf(“n- 哈希表的建立和查找“);InitNameList(); CreateHashList();while(1)print f(“nn“);f(“print显示哈希. 表n“);f(“print查找. n“);f(“print退出. n“);err:charch1; scanf(“%c“,&ch1); if(ch1=”1”) Display(); elseif(ch1=”2”) FindList();5 / 125elseif(ch1=”3”) return0;elseprintf(“n请输入正确的选择!“); gotoerr;”.

11、6 / 126.5. 调试分析(略) 6使用说明程序名为 hash,运行环境为DOS。程序执行后显示=显示哈希表查找退出= SELECT:在 select 后输入数字选择执行不同的功能。 要求首先输入足够多的插入元素, 才可以进展其他的操作。每执行一次功能,就会显示执行的结果正确或错误 以及执行后单链表的内容。选择 1:显示哈希表选择 2:显示请输入姓名的拼音,要求输入要删除元素的位置,执行成功后返回元素的值。选择 3:退出程序7. 测试结果 哈希表的建立和查找 显示哈希表查找退出1地搜寻长H(拼址关键字度key)音0000100020003000475614ngliupe5000sheny6118116onghai7 / 127700080009000010001100021294112abc”.8 / 128.311094131houxinming410

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号