版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、沈阳航空航天大学课程设计报告 i 沈阳航空航天大学课课 程程 设设 计计 报报 告告课程设计名称:数据结构课程设计数据结构课程设计课程设计题目: 基于基于 hashhash 表的班级表的班级成员管理成员管理沈阳航空航天大学课程设计报告 ii 目目 录录1 题目介绍和功能要求题目介绍和功能要求.11.1 题目介绍 .11.2 功能要求 .11.3 基本功能 .12 系统功能模块结构图系统功能模块结构图.22.1 系统功能结构框图.22.2 系统主要模块的功能说明.23 使用的数据结构的描述使用的数据结构的描述.43.1 数据结构设计 .43.2 数据结构用法说明 .44 函数的描述函数的描述.5
2、4.1主要函数设计.54.2 主要函数流程图.55 程序测试和运行的结果程序测试和运行的结果.85.1 程序测试.85.2 运行结果.96 参考文献参考文献.11附附 录(关键部分程序清单)录(关键部分程序清单).12沈阳航空航天大学课程设计报告 1 1 题目介绍和功能要求1.1 题目介绍题目介绍针对本班成员以姓名为关键字设计一个 hash 表,使得平均查找长度不超过 r。要求:1.自行设计至少 3 中 hash 函数;2.每种 hash 函数采用线性探测再散列和伪随机数探测再散列进行冲突处理;针对本班成员给出每种 hash 函数的平均查找长度。建立一个确定的对应关系 f,使每个关键字和结构中
3、的一个唯一的存储位置相对应。在查找时,只要根据这个对应关系 f 找到给定值 k 的像 f(k)所建立的表即为哈希表。1.2 功能要求功能要求1.用三种方法创建哈希函数,分别为除留取余法,随机数法和分割法。2.当哈希地址产生冲突时,利用线性探测再散列和伪随机数探测再散列进行冲突处理得到新的哈希地址,并存入哈希表中。3.给出每个用户名的查找长度和该函数的平均查找长度,并比较哪种方法最好。1.3 基本功能基本功能1.createhashlist()建立 hash 函数,并采用两种冲突处理方法进行操作。2.searchhash()查找 hash 表,将用户所输入的信息从 hash 表中调出,并给出查找
4、长度沈阳航空航天大学课程设计报告 2 2 系统功能模块结构图2.1 系统功能结构框图系统功能结构框图创建 hash 表哈希函数模块(除留取余)哈希函数模块(随机数法)哈希函数模块(分割法)冲突处理模块冲突处理模块冲突处理模块冲突处理模块查找模块冲突处理模块冲突处理模块查找模块查找模块图图 2.12.1 系统功能结构框图系统功能结构框图2.2 系统主要模块的功能说明系统主要模块的功能说明1. 哈希模块createhashlist();(adr 为哈希地址)初始化 hash 表,并创建 hash 函数,并将用户姓名添加至 hash 表中。1) 除留取余法:adr=(datalisti.k)%m;(
5、将 datalisti.k 所存的ascii 码除以 m 取余所得的哈希地址赋给 adr)2) 随机函数法: srand(datalisti.k);int adr=rand()%l;(将 datalisti.k 所存的 ascii 码作为种子传入至 srand 函数中,并用 rand 函数产生 l 以内的随机值为哈希地址赋给 adr)沈阳航空航天大学课程设计报告 3 3) 分割法: change(datalist,a,i);int adr=a1*10+a2;( datalisti.k 所存的 ascii 码利用change()函数分割开,并去第二个数字和第三个数字作为哈希地址赋给 adr)2.
6、 冲突处理模块1) srand(姓名 ascii 码);d=(d+rand()%l)%m;伪随机探测再散列2) d=d+1;线性探测再散列3. 查找模块searchhash();查找用户输入姓名是否在 hash 表中;给出该姓名的查找长度和该 hash 函数的平均查找长度。沈阳航空航天大学课程设计报告 4 3 使用的数据结构的描述3.1 数据结构设计数据结构设计建立一个确定的对应关系 f,使每个关键字和结构中的一个唯一的存储位置相对应。在查找时,只要根据这个对应关系 f 找到给定值 k 的像 f(k)为存储地址的结构体数组即为哈希表。哈希表举例(平方取中法):a b c z 0 1 2 901
7、 02 0332 60 61 62 71记录关键字(关键字)2哈希地址(217-29)aiji0p1p2q1q2q3010011001200116020612062216121622163001000012100001440000137040043105414314704473474147413044745651010210440370310314734741745表表 3.13.1 哈希表哈希表3.2 数据结构用法说明数据结构用法说明取关键字平方后的中间几位为哈希地址。这是一种比较常用的构造哈希函数的方法。通常在选定哈希函数时不一定能知道关键字的全部情况,取其中哪几位也不一定合适,而一个数平
8、方后的中间几位数和数的每一位都相关,由此使随即分布的关键字得到的哈希地址也是随即的。取的位数由表长决定。如表 3.1 列出了一些标识符及它们的哈希地址。沈阳航空航天大学课程设计报告 5 4 函数的描述4.1 主要函数设计主要函数设计1. input ();作用作用:将用户姓名换算成 ascii 码。2. createhashlist();作用作用:将用户名输入至哈希表中,并用两种冲突处理方法进行冲突处理。3. searchhash();作用作用:将用户输入的用户名在哈希表中进行查找,并给出查找结果和查找长度,和该函数的平均查找长度。4. print ();作用作用:打印出程序的主菜单和界面。5
9、. change();作用作用: 将用户姓名的 ascii 码分割为多个数字并存入数组中。4.2 主要函数流程图主要函数流程图1. createhashlist();沈阳航空航天大学课程设计报告 6 开始num哈希表初始化哈希函数处理线性探测再散列冲突处理后将数据导入哈希表中判断冲突将数据导入哈希表中yn1哈希表初始化哈希函数处理判断冲突将数据导入哈希表中yn伪随机数探测再散列冲突处理后将数据导入哈希表中2结束图图 4.2.14.2.1 创建函数流程图创建函数流程图 2. searchhash();沈阳航空航天大学课程设计报告 7 开始将姓名转化为ascii码判断是否一样和哈希表中的数据ret
10、urn successy冲突处理n判断是否一样和哈希表中的数据return successyreturn unsuccessn结束图图 4.2.24.2.2 查找函数流程图查找函数流程图 沈阳航空航天大学课程设计报告 8 5 程序测试和运行的结果5.1 程序测试程序测试程序开始菜单:图图 5.1.15.1.1 一号菜单图一号菜单图 输入 1 或者 2;图图 5.1.25.1.2 二号菜单图二号菜单图输入 1;图图 5.1.35.1.3 查找图查找图输入 2;图图 5.1.45.1.4 平均查找图平均查找图沈阳航空航天大学课程设计报告 9 5.2 运行结果运行结果给出 3 组数据,每组数据 29
11、 个用户名,分别用三种哈希函数和两种冲突处理方法进行操作,结果如图:1.数据 1:1) 除留取余法:(一)线性探测再散列:(二)伪随机数探测再散列:2) 随机数法:(一)线性探测再散列:(二)伪随机数探测再散列:3) 分割法:(一)线性探测再散列:(二)伪随机数探测再散列:2.数据 2:1) 除留取余法:(一)线性探测再散列:(二)伪随机数探测再散列:2) 随机数法:(一)线性探测再散列:(二)伪随机数探测再散列:3) 分割法:(一)线性探测再散列:(二)伪随机数探测再散列:3.数据 3:1) 除留取余法:(一)线性探测再散列:(二)伪随机数探测再散列:沈阳航空航天大学课程设计报告 10 2)
12、 随机数法:(一)线性探测再散列:(二)伪随机数探测再散列:3) 分割法:(一)线性探测再散列:(二)伪随机数探测再散列:结论:结论:经比较可知,分割法所建立的哈希函数平均查找长度最短。沈阳航空航天大学课程设计报告 11 6 参考文献1 高富平,张楚 . 电子商务法m. 北京:北京大学出版社,20022 huang s c,huang y m,shieh s mvibration and stability of a rotating shaft containing a transerse crackj, j sound and vibration,1993,162(3):3874013谭浩
13、强著. c 程序设计( 第三版). 北京: 清华大学出版社,20054数据结构: c 语言版 /严蔚敏,吴伟明编著.北京:清华大学出版社,2007沈阳航空航天大学课程设计报告 12 附 录(关键部分程序清单)#include#include#include#define l 50 /哈希表的长度 #define rand_max 10 /随机数范围#define m 47 /除留取余数值#define name_no 29 /人名的个数#define success 1#define unsucess 0#define elemtype chartypedef struct hash/哈希表e
14、lemtype *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; datalist2.data=peiting; datalist3.data=yinhang; datalist4.data=
15、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.data=fuzedong; datalist14.data=shidailong;沈阳航空航天大学课程设计报告 13 datalis
16、t15.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=lishaolun; datalist25.data=zhangkuo; datalist26.da
17、ta=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);printf(2.伪随机数探测再散列n);scanf(%d,&num);switch(num)case 1: f
18、or(i=0;il;i+)/哈希表的初始化 hlisti.data=; hlisti.k=0; hlisti.s=0; for(i=0;il;i+) sum=0; int adr=(datalisti.k)%m; /哈希函数(除留取余)沈阳航空航天大学课程设计报告 14 if(i=name_no) break; int d=adr; if(hlistadr.s=0) hlistadr.k=datalisti.k; hlistadr.data=datalisti.data; hlistadr.s=1;/此处已有数据 else do d=d+1; /线性探测再散列法处理冲突 sum=sum+1;
19、/查找次数加 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(hlistadr.data,name)=0)*k=hlistadr.s;return succe
20、ss;沈阳航空航天大学课程设计报告 16 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;elsewhile(1)if(nl|strlen(hlistadr.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);沈阳航空航天大学课程设计报告 17 void main()c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淮阴师范学院《地理教学论》2021-2022学年第一学期期末试卷
- 淮阴工学院《液压与气压传动1》2023-2024学年第一学期期末试卷
- 淮阴工学院《土力学与工程地质》2022-2023学年第一学期期末试卷
- 文书模板-《银行零售宣传活动方案》
- 探索专业技术培训的蓝海考核试卷
- 制糖企业的知识产权管理与技术创新考核试卷
- 关于石头的高考作文素材5篇
- 天然气开采与利用的公众参与与社会合作伙伴模式考核试卷
- 塑料制品的优点与缺点分析考核试卷
- 基于循环的持续改进管理方法考核试卷
- 建筑施工安全生产专项整治三年行动实施方案
- 管卡管件标准2010
- FMPS多维完美主义量表中文版及英文原版
- 砼质量缺陷修补方案
- 美国的人才机制
- 电压和电阻复习课件
- 《巴蜀文化简论》PPT课件.ppt
- 物业公司消防维保质量检查内容及考核评分表
- 电动自行车火灾的勘查检验技术及案例分析
- 螺栓检测报告
- 腐蚀测量及技术
评论
0/150
提交评论