第一篇:软件综合实习-哈希表
哈希表的设计实验报告
1.实验题目
针对自己班级体中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。
2.需求分析
假设人名为中国姓名的汉语拼音模式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用链表法处理冲突。测试数据:
①输入的形式和输入值的范围:输入30个人的姓名拼音,即30个字符串。
②输出的形式:将结果输出,程序自动计算查找长度的总数和平均查找长度,然后用户可以根据需求进行查找操作。
③程序所能达到的功能:在哈希函数确定的前提下用各种不同处理冲突的方法,考察平均查找长度的变化和造好的哈希表中关键字的聚集性。
3.概要设计
#define HASH_LEN 50 //哈希表的长度 #define M 47 #define NAME_NO 30 //人名的个数 typedef struct NAME {char *py;//名字的拼音 int k;//拼音所对应的整数 }NAME;NAME NameList[HASH_LEN];typedef struct hterm //哈希表 {char *py;//名字的拼音 int k;//拼音所对应的整数 int si;//查找长度 }HASH;void InitNameList()void FindList()void Display()4.详细设计
1{for(int i=0;i int s0=0;for(int r=0;r<20;r++)//求出姓名的拼音所对应的整数(关键字)s0+=name[r]; int sum=1;int adr=s0 % M;//使用哈希函数 int d=adr; if(HashList[adr].k==s0)//分3种情况进行判断 printf(”n姓名:%s 关键字:%d 查找长度为: 1“,HashList[d].py,s0);else if(HashList[adr].k==0)printf(”无该记录!“);else { int g=0;do { d=(d+s0%10+1)%M;//伪散列 sum=sum+1;if(HashList[d].k==0){ printf(”无记录!“);g=1;} if(HashList[d].k==s0){ printf(”n姓名:%s 关键字:%d 查找长度为:%d“,HashList[d].py,s0,sum);g=1;} }while(g==0);} void main(){ InitNameList();CreateHashList();while(1){ printf(”nn“);printf(” 1.显示哈希表n“);printf(” 2.查找n“);printf(” 3.退出n“);err: char ch1;scanf(”%c“,&ch1);if(ch1=='1')Display();else if(ch1=='2')FindList();else if(ch1=='3')return;else { printf(”n请输入正确的选择!“);goto err;} } } 5.调试分析 测试数据:随机输入的30个人的姓名拼音 测试过程:输入30个人的姓名拼音,观察输出结果,并进行查找操作 测试结果: 6.使用说明 1)进入界面选择1显示哈希表,选择2为查找,选择3退出 2)再输入名字查找,再退出 7.测试结果 8.附录 #include int k;//拼音所对应的整数 }NAME;NAME NameList[HASH_LEN]; typedef struct hterm //哈希表 { char *py;//名字的拼音 int k;//拼音所对应的整数 int si;//查找长度 }HASH;HASH HashList[HASH_LEN];void InitNameList(){ NameList[0].py=”chenghongxiu“;NameList[1].py=”yuanhao“;NameList[2].py=”yangyang“;NameList[3].py=”zhanghen“;NameList[4].py=”chenghongxiu“;NameList[5].py=”xiaokai“;NameList[6].py=”liupeng“;NameList[7].py=”shenyonghai“;NameList[8].py=”chengdaoquan“;NameList[9].py=”ludaoqing“;NameList[10].py=”gongyunxiang“;NameList[11].py=”sunzhenxing“;NameList[12].py=”sunrongfei“;NameList[13].py=”sunminglong“;NameList[14].py=”zhanghao“;NameList[15].py=”tianmiao“;NameList[16].py=”yaojianzhong“;NameList[17].py=”yaojianqing“;NameList[18].py=”yaojianhua“;NameList[19].py=”yaohaifeng“;NameList[20].py=”chengyanhao“;NameList[21].py=”yaoqiufeng“;NameList[22].py=”qianpengcheng“;NameList[23].py=”yaohaifeng“;NameList[24].py=”bianyan“;NameList[25].py=”linglei“;NameList[26].py=”fuzhonghui“;NameList[27].py=”huanhaiyan“;NameList[28].py=”liudianqin“;NameList[29].py=”wangbinnian“;char *f;int r,s0;for(int i=0;i for(r=0;*(f+r)!= ' ';r++)//方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字 s0=*(f+r)+s0;NameList[i].k=s0;} } void CreateHashList(){ for(int i=0;i HashList[d].k=NameList[i].k;HashList[d].py=NameList[i].py;HashList[d].si=sum+1;}i++;} void FindList(){ printf(”nn请输入姓名的拼音: “);//输入姓名 char name[20]={0};scanf(”%s“,name); int s0=0;for(int r=0;r<20;r++)//求出姓名的拼音所对应的整数(关键字)s0+=name[r]; int sum=1;int adr=s0 % M;//使用哈希函数 int d=adr; if(HashList[adr].k==s0)//分3种情况进行判断 printf(”n姓名:%s 关键字:%d 查找长度为: 1“,HashList[d].py,s0);else if(HashList[adr].k==0)printf(”无该记录!“);else { int g=0;do { d=(d+s0%10+1)%M;//伪散列 sum=sum+1;if(HashList[d].k==0){ printf(”无记录!“);g=1;} if(HashList[d].k==s0){ printf(”n姓名:%s 关键字:%d 查找长度为:%d“,HashList[d].py,s0,sum);g=1;} }while(g==0);} } void Display(){ printf(”nn地址t关键字tt搜索长度tH(key)tt拼音 n“);//显示的格式 for(int i=0;i<15;i++){ printf(”%d “,i);printf(”t%d “,HashList[i].k);printf(”tt%d “,HashList[i].si);printf(”tt%d “,(HashList[i].k)%M);printf(”t %s “,HashList[i].py);printf(”n“);} // getch();for(i=15;i<30;i++){ printf(”%d “,i);printf(”t%d “,HashList[i].k);printf(”tt%d “,HashList[i].si);printf(”tt%d “,(HashList[i].k)%M);printf(”t %s “,HashList[i].py);printf(”n“);} // printf(”按任意键继续显示...n“);// getch();for(i=30;i<40;i++){ printf(”%d “,i);printf(”t%d “,HashList[i].k);printf(”tt%d “,HashList[i].si);printf(”tt%d “,(HashList[i].k)%M);printf(”t %s “,HashList[i].py);printf(”n“);} //printf(”按任意键继续显示...n“);//getch();for(i=40;i<50;i++){ printf(”%d “,i);printf(”t%d “,HashList[i].k);printf(”tt%d “,HashList[i].si);printf(”tt%d “,(HashList[i].k)%M);printf(”t %s “,HashList[i].py);printf(”n“);} float average=0;for(i=0;i printf(”n------------------------哈希表的建立和查找----------------------“);InitNameList();CreateHashList(); while(1){ printf(”nn“);printf(” 1.显示哈希表n“);printf(” 2.查找n“);printf(” 3.退出n“); err: char ch1;scanf(”%c“,&ch1);if(ch1=='1')Display();else if(ch1=='2')FindList();else if(ch1=='3')return;else { printf(”n请输入正确的选择!");goto err;} } } 《哈希表》项目实验报告 1、实验名称 哈希表问题 2、小组成员 刘艳宁、邓芳益; 3、主要内容和步骤: (1)分析问题描述,明确问题目标 对于一个哈希表,它是通过哈希算法,然后将数据按照哈希算法所得到的哈希地址存入到哈希表中。所以对于一个哈希表,要了解它的存储方式、哈希表的冲突处理、数据的输入、数据的追加、哈希表的判空、哈希表清空、数据的查找(2)分析问题数据描述 [数据描述]首先分析哈希表的构造方法:除留余数法 取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址。H(key)=key MOD p(p<=m);//哈希表的存储方法 但是由于java中已经嵌入了哈希表,所以直接调用java中的哈希表: Import java.uilt.HashMap//调用java中的哈希表函数; (3)确定算法思路,准确描述算法 [算法描述]首先运用java里面的哈希表; import java.util.Scanner;//调用java里面的Scanner供用户进行数据的输入 import java.util.HashMap;//调用java哈希表 根据公式:H(key)=key MOD p(p<=m)用输入的关键字来与哈希表的总长度来进行求余运算,然后将求得的余数存入到哈希表相应的位置中 对于哈希表的查找: 则根据哈希表的除留余数法然后进行数据的查找;当ASL为1时时最理想的,因为只需要查找一次,如果第一次没有查找到,则在先前的位置上加一进行查找,直到查找到数据为止然后返回。(4)运行数据记录 输入:学号:1000 姓名:张三 输入:学号:1001 姓名:李四 输出哈希表数据,然后进行判空,查找等操作(5)实验效果图示 4、实验总结:(心得体会、处理结果、存在的问题、建议和意见等) 心得体会:如果要实现哈希表的各个操作,首先要了解哈希表的存储方式;其次就是算法的构造上面,该程序是直接调用java中的hashmap,所以在算法上程序构造相对的比较简单。 存在的问题:不能够直观的输出哈希表的存储方式。 运城学院综合实习鉴定表 填表时间:年月日 (以上部分由学生本人填写) 说明: 1、实习学生完成实习填好相关内容,并由实习单位鉴定盖章后,将此表交给系指导教师。 2、“初评成绩”由实习单位指导教师和系指导教师根据学生的实习情况按百分制计入。 3、“综合成绩”由系实习领导小组按“优秀、良好、中等、及格、不及格”五级制计入。 4、本表填好后统一交教务处,由院实习领导组审核并加盖教务处公章后,存入学生档案。 毕业综合实习考核鉴定表 姓名 系(部) 填表时间班级 成都市工业职业技术学校 毕业综合实习(实训)管理办法 一、毕业综合实习(实训)一般安排在学制的最后两个学期进行。如学校联系单位,由招就处办理相关手续;如学生自己联系实习单位,由学生本人提出书面申请,同时须出具实习用人单位的证明交学校,经学校同意后进行实习。 二、学生在毕业综合实习(实训)期间,应注重以下的实习内容:(1)了解企业文 化,积极进行实际操作,熟悉生产、工艺流程。(2)在实践中不断发现问题,在学习中解决;学习的疑惑,在实践中验证。(3)了解社会,向社会学习,在实践中培养管理能力、交流能力、首创精神和合作态度。(4)学习掌握处理各方的人际关系、注重学习方法以提升自身的竞争能力、培养把握与适应环境的能力。学生须就以上内容撰写实习报告,同时做好实习笔记。 三、在理论教学未完成的情况下,学生必须通过自修完成本学期的全部课程内容。 有条件返校的,须参加学校期末考试;无条件返校的,以自修作业、实习笔记、实习报告和实习单位鉴定作为相关课程的考核依据,并将以上资料于每学期期末(上学期:12月15日前;下学期:6月10日前)交回学校。 四、学生在外实习期间不得从事国家法律所禁止的一切活动,否则,一切后果自 负。 五、学生必须严格遵守所在实习单位的规章制度、劳动纪律和安全规定,严格要 求自己,注意个人言行;对实习中表现不好学生,学校视其情节给予纪律处分。 六、由于学生本人自身原因或违反学校实习规定及实习单位的规章制度和工作制 度所造成的一切不良后果,由学生本人负责,学校不承担任何责任。若造成实习设备损坏的,由责任人负责赔偿。 七、学生要牢固树立“安全第一”的思想,在外出实习、实践中途要时刻注意避 免事故发生。 八、学生实习、实践期间,由招就处、系(部)指定指导教师或负责人,由指定 指导教师或负责人处理各种应急事宜,负责学生的联系、监督、管理。 时间内交回学校。 武汉理工大学《数据结构》课程设计说明书 课程设计任务书 学生姓名: 刘颖 专业班级: 计科1003班 指导教师: 谭新明 工作单位: 计算机科学系 题 目: 哈希表的设计与实现 初始条件: 针对某个集体(比如你所在的班级)中的“人名”设计并实现一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。 (1)假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。 (2)哈希函数用除留余数法构造 (3)用伪随机探测再散列法处理冲突。 (4)测试用例见严蔚敏《数据结构习题集(C语言版)》p166。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容: 1.问题描述 简述题目要解决的问题是什么。2.设计 存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计; 3.调试报告 调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。4.经验和体会(包括对算法改进的设想) 5.附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出。 说明: 1.设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。2.凡拷贝往年任务书或课程设计充数者,成绩一律无效,以0分记。 时间安排: 1、6月15日~6月21日完成。2、6月22日上午和下午在实验中心检查程序、交课程设计报告、源程序(U盘)。 指导教师签名: 2012年6月14日 系主任(或责任教师)签名: 年 月 日 武汉理工大学《数据结构》课程设计说明书 目录 1问题分析和任务定义...............................................3 1.1问题描述.......................................................3 1.2问题分析.......................................................3 2开发平台.........................................................3 3数据类型和系统设计...............................................3 3.1存储结构设计...................................................3 3.2主要算法设计...................................................4 3.2.1姓名结构体数组初始化.........................................4 3.2.2获取关键码...................................................5 3.2.3哈希表结构体数组初始化.......................................5 3.2.4构造哈希表...................................................5 3.2.5打印哈希表...................................................6 3.2.6在哈希表中查找姓名...........................................6 4调试结果与运行情况分析...........................................8 4.1程序运行结果...................................................8 4.2运行情况分析...................................................9 4.3算法的时间复杂度...............................................9 5自我评价与总结...................................................9 6参考文献........................................................10 7附:源代码......................................................11 武汉理工大学《数据结构》课程设计说明书 哈希表的设计与实现 1问题分析和任务定义 1.1问题描述 设计哈希表,要求用除留余数法构造哈希函数,用伪随机探测再散列法处理冲突,使平均查找长度的上限为2。待填入哈希表的人名共有30个,且为中国人姓名的汉语拼音形式。 1.2问题分析 (1)待填入哈希表的人名有30个,平均查找长度的上限为2。用除留余数法构造哈希表,用伪随机探测再散列法处理冲突,完成相应的建立和查表程序。 (2)人名为汉语拼音形式,最长不超过20个字符。 (3)查找成功时,显示姓名、关键字、初散列值、再散列值、哈希表中的位置及查找长度;查找失败时,显示无此记录。 (4)可多次查找,继续查找输入1,退退出输入0。 2开发平台 系统:Windows 7 开发工具:Visual studio 2008 语言:C++ 3数据类型和系统设计 3.1 存储结构设计 typedef struct { int key; char *p;}NAME; 武汉理工大学《数据结构》课程设计说明书 typedef struct { int key;//关键字 int hash;//初始地址 int reha;//再散列值 char *p;//名字 int l;//查找长度 }HASH;3.2主要算法设计 3.2.1 NAME(结构体数组)初始化 NAME a[30];a[0].p=“wangjunzhe”;a[1].p=“mahaiping”;a[2].p=“luozijian”;a[3].p=“luoxiangzhou”;a[4].p=“zhangkai”;a[5].p=“fengyuyang”;a[6].p=“wuzhenzhen”;a[7].p=“haokaiqi”;a[8].p=“caopu”;a[9].p=“liuying”;a[10].p=“cuijuan”;a[11].p=“hanqianqiqn”;a[12].p=“lixiaoyu”;a[13].p=“caoyingnan”;a[14].p=“jinbaoyu”;a[15].p=“zhaduo”;a[16].p=“wenbo”;a[17].p=“cuichangwei”;a[18].p=“zhangqiu”;a[19].p=“luopeng”;a[20].p=“hudie”;a[21].p=“xieshanshan”;a[22].p=“liming”;a[23].p=“zhangshuai”;a[24].p=“qiuyajun”;a[25].p=“yanruibin”;a[26].p=“jiangwei”;a[27].p=“fangzhaohua”;a[28].p=“yujia”; 武汉理工大学《数据结构》课程设计说明书 a[29].p=“liuzhenzhen”;3.2.2获取关键码 字符串的各个字符所对应的ASCII码相加,所得的整数做为关键字。 int i,s,r;for(i=0;i<30;i++){ s=0;for(r=0;*(a[i].p+r)!=' ';r++) { s+=*(a[i].p+r); a[i].key=s; } } 3.2.3 HASH(结构体数组)初始化 HASH h[40];for(i=0;i<40;i++){ h[i].key=0;h[i].hash=0;h[i].reha=0;h[i].p=“ ”;h[i].l=0;} 3.2.4构造哈希表 for(i=0;i<30;i++){ int sum=0;int hi=(a[i].key)%37;//哈希函数 int hj=(7*a[i].key)%10+1;//再散列函数 if(h[hi].l==0)//如果不冲突 { h[hi].key=a[i].key;h[hi].hash=(a[i].key)%37;h[hi].reha=(7*a[i].key)%10+1;h[hi].p=a[i].p; 武汉理工大学《数据结构》课程设计说明书 h[hi].l=1; } else //冲突 { int finh;//最终地址 do { finh=(hi+hj)%40;//伪随机探测再散列法处理冲突 hi=finh;sum=sum+1;//查找次数加 }while(h[hi].l!=0); h[hi].key=a[i].key; h[hi].hash=(a[i].key)%37; h[hi].reha=(7*a[i].key)%10+1;h[hi].p=a[i].p;h[hi].l=sum+1; } } 3.2.5打印哈希表 float average=0;cout<<“关键码 初散列 再散列 哈希地址 查找次数 姓名”< for(i=0;i<40;i++)average+=h[i].l;average/=30;cout<<“平均查找长度:ASL=”< int m;do //m=1,继续查找;m=0,退出查找 { char *f=new char[20];int key=0,n=0,g,l=1,adr;cout<<“请输入姓名的拼音:”< 武汉理工大学《数据结构》课程设计说明书 { n+=*(f+g); key=n; } adr=key%37;//哈希函数求初散列值 if(h[adr].key==key)//分3种情况进行判断 { cout<<“关键字:”< cout<<“初散列值为:”< cout<<“再散列值为:”< cout<<“表中位置为:”< int finh;//最终地址 int sign=0; do { finh=(adr+7*key%10+1)%40;//再散列法处理冲突 adr=finh;l=l+1;//查找次数加 if(h[adr].key==0) { sign=1; cout<<“无此记录!”< } if(h[adr].key==key) { sign=1;cout<<“关键字:”< } }while(sign==0);} cout<<“继续查询请输入,退出请输入:”< 武汉理工大学《数据结构》课程设计说明书 4调试结果与运行情况分析 4.1程序运行结果 武汉理工大学《数据结构》课程设计说明书 4.2运行情况分析 哈希表的输出与预期相同且正确,并查找了“liuying”、“jiangwei”、“huangxiao”三个姓名,分别代表查找一次、多次后成功及查找不成功的情况,且查找结果正确。 4.3算法的时间复杂度 O(n)5自我评价与总结 经过这次课程设计的学习,让我明白了编写程序的思路是很重要的,不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在编写一个程序之前,如果脑袋里面没有思路,根本就不可能编出好的程序。就算能编出程序来,相信编出的程序的逻辑性也不会很强,因为是想到什么就编什么,不系统。因此在我们编程序之前一定要做好充分的准备,首先要理清自己的思路,然后再将思路分划成几个模块,一块一块的编写,最后再将所有的模块联系起来,组成一个完整的程序。在上机实验之前,最好将程序编写好在草稿纸上,这样在编译的时候也比较有效率。 课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.“千里之行始于足下”,通过这次课程设计,武汉理工大学《数据结构》课程设计说明书 我深深体会到这句千古 名言的真正含义。今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳 健地在社会大潮中奔跑打下坚实的基础。数据结构,是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。这一门课的内容不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。通过这次哈希表的设计,我在多方面都有所提高。 在这次课程设计的过程中,我也遇到了很多难题。在种种的困难中,我明白了耐心在编写程序时的重要性。如果你没有耐心就肯定编不出好的程序,特别是在调试的过程中。我们初次写的程序在电脑上调试的时候也许会出项几百个错误,这时候我们应该耐心的检查出错的地方和原因,并予以改正,而不是抱怨自己写的程序太烂错误太多,就此放弃。相信再强的人也不可能一次就能编译成功,总会有一些问题出现。其实只要有耐心,就会发现,在修改了一个错误之后,其它有的错误也会跟着消失,所以在编译的时候一定要有耐心。通过这次课程设计,我认识到了自己动手实践的弱势,特别是在编程方面,知道了计算机的实践操作是很重要的,只有通过上机编程才能充分的了解自己的不足。而自己完成了这样的课程设计,也是对自己实力的检测,使我对以后的学习也充满了信心和期待。这次的课程设计,更是让我深刻认识到自己在学习中的不足,同时也找到了克服这些不足的方法,这也是一笔很大的资源。 数据结构是一门比较难的课程,需要花很多的时间去练习和实践。要想把这门课程学好学精不是一件容易的事,但是相信事在人为,只要肯下功夫就一定能学好。总的来说,这次程序设计让我获益匪浅,相信在以后的学习生活中我也能从中获得启发。在以后的时间中,我们应该利用更多的时间去上机 实验,加强自学的能力,多编写程序,相信不久后我们的编程能力都会有很大的提高能设计 出更多的更有创新的作品。 我认为我的设计优点在于只是用了简单的面向过程编程,而没有用面向对象的类的设计。类在用于比较大的程序设计时会显露较大的优势,而在此反而会增加不必要的麻烦。我的设计缺点在于不是面向大众的,即不能由用户在运行时输入姓名,只能通过在代码中的修改达到效果。 这个课题的另一种方法是使用模板类,这样做可以使程序的结构看起来更整洁简明,各种方法的相关函数一览无余;在主函数中直接调用定义在模版类中的函数,使读者可以很快明白主函数做了哪些工作,程序运行后会有哪些输入输出。 6.参考文献 1.《数据结构(用面向对象方法与C++语言描述)》(第2版)清华大学出版社 2.《C++ Primer(中文版)》(第4版)人民邮电出版社 武汉理工大学《数据结构》课程设计说明书 7.附:源代码 #include int key; char *p;}NAME;NAME a[30];a[0].p=“wangjunzhe”;a[1].p=“mahaiping”;a[2].p=“luozijian”;a[3].p=“luoxiangzhou”;a[4].p=“zhangkai”;a[5].p=“fengyuyang”;a[6].p=“wuzhenzhen”;a[7].p=“haokaiqi”;a[8].p=“caopu”;a[9].p=“liuying”;a[10].p=“cuijuan”;a[11].p=“hanqianqiqn”;a[12].p=“lixiaoyu”;a[13].p=“caoyingnan”;a[14].p=“jinbaoyu”;a[15].p=“zhaduo”;a[16].p=“wenbo”;a[17].p=“cuichangwei”;a[18].p=“zhangqiu”;a[19].p=“luopeng”;a[20].p=“hudie”;a[21].p=“xieshanshan”;a[22].p=“liming”;a[23].p=“zhangshuai”;a[24].p=“qiuyajun”;a[25].p=“yanruibin”;a[26].p=“jiangwei”;a[27].p=“fangzhaohua”;a[28].p=“yujia”;a[29].p=“liuzhenzhen”;int i,s,r; 武汉理工大学《数据结构》课程设计说明书 for(i=0;i<30;i++){ s=0;for(r=0;*(a[i].p+r)!=' ';r++) { s+=*(a[i].p+r); a[i].key=s; } } typedef struct { int key;//关键字 int hash;//初始地址 int reha;//再散列值 char *p;//名字 int l;//查找长度 }HASH;HASH h[40];for(i=0;i<40;i++){ h[i].key=0;h[i].hash=0;h[i].reha=0;h[i].p=“";h[i].l=0;} for(i=0;i<30;i++){ int sum=0;int hi=(a[i].key)%37;//哈希函数 int hj=(7*a[i].key)%10+1;//再散列函数 if(h[hi].l==0)//如果不冲突 { h[hi].key=a[i].key; h[hi].hash=(a[i].key)%37; h[hi].reha=(7*a[i].key)%10+1;h[hi].p=a[i].p;h[hi].l=1; } else //冲突 { int finh;//最终地址 武汉理工大学《数据结构》课程设计说明书 do { finh=(hi+hj)%40;//伪随机探测再散列法处理冲突 hi=finh;sum=sum+1;//查找次数加 1 }while(h[hi].l!=0); h[hi].key=a[i].key; h[hi].hash=(a[i].key)%37; h[hi].reha=(7*a[i].key)%10+1;h[hi].p=a[i].p;h[hi].l=sum+1; } } float average=0;cout<<”关键码初散列再散列哈希地址查找次数姓名“< for(i=0;i<40;i++)average+=h[i].l;average/=30;cout<<”平均查找长度:ASL=“< n+=*(f+g); key=n; } adr=key%37;//哈希函数求初散列值 if(h[adr].key==key)//分3种情况进行判断 { cout<<”关键字:“< cout<<”初散列值为:“< cout<<”再散列值为:“< 武汉理工大学《数据结构》课程设计说明书 cout<<”表中位置为:“< int finh;//最终地址 int sign=0; do { finh=(adr+7*key%10+1)%40;//再散列法处理冲突 adr=finh;l=l+1;//查找次数加 if(h[adr].key==0) { sign=1; cout<<”无此记录!“< } if(h[adr].key==key) { sign=1;cout<<”关键字:“< } }while(sign==0);} cout<<”继续查询请输入,退出请输入:"<第二篇:《哈希表》项目实验报告[范文]
第三篇:化学系综合实习鉴定表2013.7.21
第四篇:毕业综合实习考核鉴定表
第五篇:数据结构课程设计之姓名哈希表的建立及查找