ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:158.54KB ,
资源ID:16363927      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-16363927.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于Hash表的班级成员管理数据结构课程设计.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于Hash表的班级成员管理数据结构课程设计.docx

1、基于Hash表的班级成员管理数据结构课程设计沈阳航空航天大学课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目: 基于Hash表的班级成员管理目 录1 题目介绍和功能要求 11.1 题目介绍 11.2 功能要求 11.3 基本功能 12 系统功能模块结构图 22.1 系统功能结构框图 22.2 系统主要模块的功能说明 23 使用的数据结构的描述 43.1 数据结构设计 43.2 数据结构用法说明 44 函数的描述 54.1 主要函数设计 54.2 主要函数流程图 55程序测试和运行的结果 85.1 程序测试 85.2 运行结果 96参考文献 11附 录(关键部分程序清单) 12

2、1 题目介绍和功能要求1.1 题目介绍针对本班成员以姓名为关键字设计一个Hash表,使得平均查找长度不超过R。要求:1. 自行设计至少3中Hash函数;2. 每种Hash函数采用线性探测再散列和伪随机数探测再散列进行冲突处理;针对本班成员给出每种Hash函数的平均查找长度。建立一个确定的对应关系f,使每个关键字和结构中的一个唯一的存储位置相对应。在查找时,只要根据这个对应关系f找到给定值K的像f(K)所建立的表即为哈希表。1.2 功能要求1. 用三种方法创建哈希函数,分别为除留取余法,随机数法和分割法。2. 当哈希地址产生冲突时,利用线性探测再散列和伪随机数探测再散列进行冲突处理得到新的哈希地

3、址,并存入哈希表中。3. 给出每个用户名的查找长度和该函数的平均查找长度,并比较哪种方法最好。1.3 基本功能1. CreateHashList() 建立Hash函数,并采用两种冲突处理方法进行操作。2. SearchHash() 查找Hash表,将用户所输入的信息从Hash表中调出,并给出查找长度2 系统功能模块结构图2.1 系统功能结构框图图2.1 系统功能结构框图2.2 系统主要模块的功能说明1. 哈希模块CreateHashList();(adr为哈希地址)初始化Hash表,并创建Hash函数,并将用户姓名添加至Hash表中。1) 除留取余法:adr=(DATALISTi.k)%M;(

4、将DATALISTi.k所存的ASCII码除以M取余所得的哈希地址赋给adr)2) 随机函数法: srand(DATALISTi.k);int adr=rand()%L;(将DATALISTi.k所存的ASCII码作为种子传入至srand函数中,并用rand函数产生L以内的随机值为哈希地址赋给adr)3) 分割法: change(DATALIST,A,i);int adr=A1*10+A2;( DATALISTi.k所存的ASCII码利用change()函数分割开,并去第二个数字和第三个数字作为哈希地址赋给adr)2. 冲突处理模块1) srand(姓名ASCII码);d=(d+rand()%

5、L)%M;伪随机探测再散列2) d=d+1;线性探测再散列3. 查找模块SearchHash();查找用户输入姓名是否在Hash表中;给出该姓名的查找长度和该Hash函数的平均查找长度。 3 使用的数据结构的描述3.1 数据结构设计建立一个确定的对应关系f,使每个关键字和结构中的一个唯一的存储位置相对应。在查找时,只要根据这个对应关系f找到给定值K的像f(K)为存储地址的结构体数组即为哈希表。哈希表举例(平方取中法):A B C Z 0 1 2 901 02 03 32 60 61 62 71记录关键字(关键字)2哈希地址(217-29)AIJI0P1P2Q1Q2Q30100110012001

6、16020612062216121622163001000012100001440000137040043105414314704473474147413044745651010210440370310314734741745表3.1 哈希表3.2 数据结构用法说明取关键字平方后的中间几位为哈希地址。这是一种比较常用的构造哈希函数的方法。通常在选定哈希函数时不一定能知道关键字的全部情况,取其中哪几位也不一定合适,而一个数平方后的中间几位数和数的每一位都相关,由此使随即分布的关键字得到的哈希地址也是随即的。取的位数由表长决定。如表3.1列出了一些标识符及它们的哈希地址。 4 函数的描述4.1 主

7、要函数设计1. Input ();作用:将用户姓名换算成ASCII码。2. CreateHashList();作用:将用户名输入至哈希表中,并用两种冲突处理方法进行冲突处理。3. SearchHash();作用:将用户输入的用户名在哈希表中进行查找,并给出查找结果和查找长度,和该函数的平均查找长度。4. Print ();作用:打印出程序的主菜单和界面。5. Change();作用: 将用户姓名的ASCII码分割为多个数字并存入数组中。4.2 主要函数流程图1. CreateHashList();图4.2.1创建函数流程图 2. SearchHash();图4.2.2查找函数流程图 5程序测试

8、和运行的结果5.1 程序测试程序开始菜单:图5.1.1 一号菜单图 输入1或者2;图5.1.2 二号菜单图输入1;图5.1.3查找图输入2;图5.1.4平均查找图5.2 运行结果给出3组数据,每组数据29个用户名,分别用三种哈希函数和两种冲突处理方法进行操作,结果如图:1. 数据1:1) 除留取余法:(一) 线性探测再散列:(二) 伪随机数探测再散列:2) 随机数法:(一) 线性探测再散列:(二) 伪随机数探测再散列:3) 分割法:(一) 线性探测再散列:(二) 伪随机数探测再散列:2. 数据2:1) 除留取余法:(一) 线性探测再散列:(二) 伪随机数探测再散列:2) 随机数法:(一) 线性

9、探测再散列:(二) 伪随机数探测再散列:3) 分割法:(一) 线性探测再散列:(二) 伪随机数探测再散列:3. 数据3:1) 除留取余法:(一) 线性探测再散列:(二) 伪随机数探测再散列:2) 随机数法:(一) 线性探测再散列:(二) 伪随机数探测再散列:3) 分割法:(一) 线性探测再散列:(二) 伪随机数探测再散列:结论:经比较可知,分割法所建立的哈希函数平均查找长度最短。 6参考文献1 高富平,张楚 . 电子商务法M. 北京:北京大学出版社,20022 Huang S C,Huang Y M,Shieh S MVibration and stability of a rotating

10、shaft containing a transerse crackJ, J Sound and Vibration,1993,162(3):3874013谭浩强著. C程序设计( 第三版). 北京: 清华大学出版社,20054数据结构: C语言版 /严蔚敏,吴伟明编著.北京:清华大学出版社,2007附 录(关键部分程序清单)#include#include#include#define L 50 /哈希表的长度 #define RAND_MAX 10 /随机数范围#define M 47 /除留取余数值#define NAME_NO 29 /人名的个数#define SUCCESS 1#de

11、fine UNSUCESS 0#define ElemType chartypedef struct Hash /哈希表 ElemType *data; int s; /查找长度 int k; /当前姓名的ASCII码Hash;Hash hlistL;typedef struct DATE /班级成员 char *data; /姓名 int k; /姓名ASCII码DATA;DATE DATALISTNAME_NO;void input() /姓名(结构体数组)初始化 char *m; int r,s0,i; DATALIST0.data=hudi; DATALIST1.data=lijing

12、; DATALIST2.data=peiting; DATALIST3.data=yinhang; DATALIST4.data=liulu; DATALIST5.data=lishengnan; DATALIST6.data=cuililong; DATALIST7.data=songchongyuan; DATALIST8.data=xiejinhua; DATALIST9.data=mashuangmin; DATALIST10.data=wangjing; DATALIST11.data=qiyueyu; DATALIST12.data=gaozhiwei; DATALIST13.da

13、ta=fuzedong; DATALIST14.data=shidailong; DATALIST15.data=sujun; DATALIST16.data=zhangxinglei; DATALIST17.data=liuyang; DATALIST18.data=liushuxin; DATALIST19.data=fengkunkun; DATALIST20.data=suzheng; DATALIST21.data=sunjianwei; DATALIST22.data=mengbaiyu; DATALIST23.data=yushaolong; DATALIST24.data=li

14、shaolun; DATALIST25.data=zhangkuo; DATALIST26.data=wangdanran; DATALIST27.data=lizhanying; DATALIST28.data=yangjun; for(i=0;iNAME_NO;i+) s0=0; m=DATALISTi.data; for(r=0;*(m+r)!=0;r+) s0=*(m+r)+s0; DATALISTi.k=s0; int CreateHashList() /建立哈希表 int i,num,sum; printf(请选择冲突处理方法n); printf(1.线性探测再散列n); prin

15、tf(2.伪随机数探测再散列n); scanf(%d,&num); switch(num) case 1: for(i=0;iL;i+) /哈希表的初始化 hlisti.data=; hlisti.k=0; hlisti.s=0; for(i=0;iL;i+) sum=0; int adr=(DATALISTi.k)%M; /哈希函数(除留取余) if(i=NAME_NO) break; int d=adr; if(hlistadr.s=0) hlistadr.k=DATALISTi.k; hlistadr.data=DATALISTi.data; hlistadr.s=1; /此处已有数据

16、else do d=d+1; /线性探测再散列法处理冲突 sum=sum+1; /查找次数加1 while (hlistd.s!=0); hlistd.k=DATALISTi.k; hlistd.data=DATALISTi.data; hlistd.s=sum+1; return 1; break; case 2: for(i=0;iL;i+) /哈希表的初始化 hlisti.data=; hlisti.k=0; hlisti.s=0; for(i=0;iL|strlen(hlistadr.data)=0) return UNSUCESS; adr=adr+1; n+; if(stricmp

17、(hlistadr.data,name)=0) *k=hlistadr.s; return SUCCESS; int SearchHash2(char *name,Hash hlist,int *k) /k为查找次数,伪随机数探测查找 int s0=0,r,n=1; /n为初始查找长度 for(r=0;*(name+r)!=0;r+) s0=*(name+r)+s0; int adr=s0%M; if(stricmp(hlistadr.data,name)=0) *k=hlistadr.s; return SUCCESS; else while(1) if(nL|strlen(hlistadr

18、.data)=0) return UNSUCESS; srand(s0); adr=(adr+rand()%L)%M; n+; if(stricmp(hlistadr.data,name)=0) *k=hlistadr.s; return SUCCESS; void print() printf(%*n); printf(* *n); printf(* *n); printf(* 哈希表 *n); printf(* *n); printf(* *n); printf(* *n); printf(*n);void main() char name20;int result=0,m,n;int k

19、;int i=1; /m判断选择探测方法 float c=0,d; while(1) lp: print(); printf(请选择:n); input(); m=CreateHashList(); printf(请选择:n); printf(1.查找姓名n); printf(2.显示该哈希函数的平均查找长度n); printf(3.退到上级n); scanf(%d,&n); switch(n) case 1: if(m=1) printf(请输入姓名n); scanf(%s,name); result=SearchHash1(name,hlist,&k); if(result=1) prin

20、tf(查找成功n); printf(查找长度为%dn,k); else printf(查找失败n); if(m=2) printf(请输入姓名n); scanf(%s,name); result=SearchHash2(name,hlist,&k); if(result=1) printf(查找成功n); printf(查找长度为%dn,k); else printf(查找失败n); break; case 2: d=0; for(i=0;iL;i+) d+=hlisti.s; c=d/NAME_NO; printf(平均查找长度为%fn,c); break; case 3: system(c

21、ls); goto lp; break; 课程设计总结:指导教师评语:指导教师(签字): 年 月 日课程设计成绩毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(

22、论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位

23、论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名: 日期: 年 月 日导师签名: 日期: 年 月 日指导教师评阅书指导教师评价:一、撰写(设计)过程1、学生在论文(设计)过程中的治学态度、工作精神 优 良 中 及格 不及格2、学生掌握专业知识、技能的扎实程度 优 良 中 及格 不及格3、学生综合运用所学知识和专业技能分析和解决问题的能力 优 良 中 及格 不及格4、研究方法的科学性;技术线路的可行性;设计方案的合理性 优 良 中 及格 不及格5、完成毕业论文(设计)期间的出勤情况

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2