版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构?课程设计报告哈希表问题姓 名:郑健专 业:信息管理与信息系统班 级:083221学号:08322126指导老帅:刘自强设计时间:2021年5月7日V EAST CHINA INSTITUTE OF TECHNOLOGY目录一,摘要-1二,设计要求与分析2.1课程设计要求-22.2程序分析-2三,数据结构选择与概要设计3.1数据结构选择-33.2Hash函数流程图-49四,设计算法4.1建立节点-104.2哈希函数的定义-104.3哈希查找-114.4程序测试-11五,使用说明与测试结果5.1使用说明-115.2主菜单截图-125.3添加记录截图-125.4查找截图-135.5散列结果
2、截图-135.6活空记录截图-14六,程序源代码及实验心得6.1源代码-14186.2实验心得-19课程设计评分表-20本设计主要要求分别以号码和用户名为关键字建立哈希表,并实现查找功能。所以本设计的核心问题是如何解决散列的问题, 由于结点的个数无法确认,并且如果采用线性探测法散列算法,删除结点会引起“信息丧失的问题。所以 采用链地址法散列算法。采用链地址法,当出现同义词冲突时,使用链表结构把 同义词链接在一起。首先,解决的是定义链表结点,在链接地址法中,每个结点对应一个链表结 点,它由三个域组成,而由于该程序需要分别用号码和用户名为关键字建立 哈希表,所以该链表结点它是由四个域组成.name
3、8、num11和address20郁 是char浮点型采用链地址法,其中的所有同义词构成一个单链表,再由一个表 头结点指向这个单链表的第一个结点。这些表头结点组成一个一维数组,即哈希二,设计要求与分析2.1课程设计要求设计哈希表实现号码查询系统。设计程序完成以下要求:(1)设每个记录有以下数据项:号码、用户名、地址;(2)从键盘输入各记录,分别以号码和用户名为关键字建立哈希表;(3)采用再哈希法解决冲突;(4)查找并显示给定号码的记录;(5)查找并显示给定用户的记录。2.2程序分析具体思路为:(1)对于以号码为关键字的散列函数,是将十一个数字全部相加,然后对20求余。得到的数作为地址。对于以用
4、户名为关键字的散列函数,是将所有字母的ASCLL码值相加,然后对20求余。(2)要添加用户信息, 即要有实现添加结点的功能的函数,所以要设计一个必须包括一个输入结点信息、添加结点的函数;(3)要实现查找函数,那么必须包括一个查找结点的函数;另外还有一个必不可少的就是运行之后要有一个主菜单,即要设计一个主函数(main()。(4)测试数据的选择最后,程序完成后要对程序进行编译调试,执行后要选择数据进行测试,这里选择的测试数据为:1.姓名: 郑健;:1234567;地址:江西九江;2.姓名: 吴任;:2345678;地址:江西南昌;3.姓名: 黄鑫;:3456789;地址:江西上饶;三,数据结构选
5、择与概要设计3.1数据结构选择本设计涉及到的数据结构为:哈希表。要求输入号码、用户名、地址三个信息,并要求分别以号码和用户名为关键字进行查找,所以本问题要用到两个哈希函数,进行哈希查找。在链地址法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用号码和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成,链接地址法结点结构如图:name8num11address20next其中name8和num11是分别为以号码和用户名为关键字域,存放关键字(key);address20(data)为结点的数据域,用来存储用户的地址。Next指针是用来指向下一个结点的地址。3.2 Has
6、h函数流程图以号码为关键字的hash函数流程图以姓名为关键字的hash函数流程图添加信息节点流程图姓名查找流程图调用hash()函数中新结点q指向phonekey-nextq=q-next(.结束.)号码查询流程图结束四,设计算法4.1建立节点struct node(char name8,address20;char num11;node * next;typedef node* pnode;可以为一个已有的数据类型声明多个别名,这里为该类型声明了 两个指针typedef node* mingzi;node *phone;node *nam;node *a;4.2哈希函数的定义本程序要设计两个
7、hash ()函数,分别对应号码和用户名。对关键字进行模运算,将运算结果所得的余数作为关键字(或结点)的存储地址,方法如下:以号码为关键字建立哈希函数hash(char num11)。以用户名为关键字建立哈希函数hash2(char name8)。利用强制类型转换,将用户名的每一个字母的ASCLL码值相加并且除以20后的余数。将计算出来的数作为该结点的地址赋给key2。void hash(char num11); /以号码为关键字建立哈希函数哈希函数的主旨是将号码的十一位数字全部加起来(int i = 3;key=(int)num2;while(numi!=NULL)(key+=(int)nu
8、mi;i+;key=key%20; 利用强制类型转换,将用户名的每一个字母的ASCLL码值相加并且除以20后的余数void hash2(char name8);哈希函数 以用户名为关键字建立哈希函数(int i = 1;key2=(int)name0;while(namei!=NULL)(key2+=(int)namei;i+;key2=key2%20;4.3哈希查找想要实现查找功能,同样需要两个查找函数,无论以用户名还是以号码为关键字,首先,都需要利用hash函数来计算出地址。再通过比对,如果是以号码为关键字,比较其号码是否相同, 如果相同那么输出该结点的所有信息, 如果以用户名为关键字,
9、那么比 较用户名是否相同,如果相同那么输出该结点的所有信息。如果找不到与之对应相同的,贝膊俞出无此记录。void find(char num11) ; /在以号码为关键字的哈希表中查找用户信息(hash(num);node *q=phonekey-next;while(q!= NULL)(if(strcmp(num,q-num)=0)break;q=q-next;if(q)printf(%s_%s_%sn,q-name,q-address,q-num);else printf(无此记录n);void find2(char name8) ;/在以用户名为关键字的哈希表中查找用户信息(hash2(
10、name);node *q=namkey2-next;while(q!= NULL)(if(strcmp(name,q-name)=0)break;q=q-next;4.4程序测试首先键入0,添加结点信息,然后按1进行查找,分别进行号码和姓名查找,最后可在主菜中, 选择号码散列和姓名散列,由此查看程序运行结果。至此,就解决了哈希表的设计与实现算法可能出现的各种问题,那么根据以上思路以及对问题的分析和对出现情况的解决那么可以写出源程序。五,使用说明与测试结果5.1使用说明由于address20、name8和num11可以看出地址可输入的最大字符数是20,姓名可输入的最大字符数是8,号码都为11位
11、。5.2主菜单截图C:DOCU1EITS OD SETTI!IGSADIISISTRATOK.5.3添加记录截图:!录 录列列录统也 江话7记记系土九电膈加找名码笛八西入35.4查找截图添加的内容二名俞X弛址I西上饶入345678nxC:DOCUIEJiTS AJTO SETTIMGSAD1IBISTRATOR.-.7 765 54 432X X1-1-息1_1_信 E的酎录录列列录统找Ifflle记系查-YJ加找名码空出曹出健馨_姓口5.5散列结果截图E *C:DOCUIEirS AHD SETTINGSADIIIIISTRATOR.果?1IHH果士闩再录录歹歹录统古耳可工理记记系列Lffl
12、fs江加找名码空出录录列列录记记散JJ为找名码空5.6活空记录截图应*C:DOCU1EHTS AND SETTIMGSADIIIISTRATOR.-六,程序源代码及实验心得6.1源代码#include#include#define NULL 0 unsigned int key;unsigned int key2;int *p;struct nodechar name8,address20;char num11;node * next;typedef node* pnode;typedef node* mingzi;node *phone;node *nam;node *a;void hash
13、(char num11)int i = 3;key=(int)num2;while(numi!=NULL)key+=(int)numi;i+;空录录列列录统业信记系音己加找名码空出ffijffij表馨姓口刨4歹01234S为key=key%20;void hash2(char name8)(int i = 1;key2=(int)name0;while(namei!=NULL)(key2+=(int)namei;i+;key2=key2%20;node* input()(node *temp;temp = new node;temp-next=NULL;printf(请输入姓名:n);scan
14、f(%s,temp-name);printf(输入地址:n);scanf(%s,temp-address);printf(输入:n);scanf(%s,temp-num);return temp;int apend()(node *newphone;node *newname;newphone=input();newname=newphone;newphone-next=NULL;newname-next=NULL;hash(newphone-num);hash2(newname-name);newphone-next = phonekey-next;phonekey-next=newphon
15、e;newname-next = namkey2-next;namkey2-next=newname;return 0;void create()(int i;phone=new pnode20;for(i=0;inext=NULL;void create2()(int i;nam=new mingzi20;for(i=0;inext=NULL;void list()(int i;node *p;for(i=0;inext;while(p)(printf(%s_%s_%sn,p-name,p-address,p-num);p=p-next;void list2()(int i;node *p;
16、for(i=0;inext;while(p)(printf(%s_%s_%sn,p-name,p-address,p-num);p=p-next;void find(char num11)hash(num);node *q=phonekey-next;while(q!= NULL)if(strcmp(num,q-num)=0)break;q=q-next;if(q)printf(%s_%s_%sn,q-name,q-address,q-num);else printf(无此记录n);void find2(char name8)hash2(name);node *q=namkey2-next;w
17、hile(q!= NULL)if(strcmp(name,q-name)=0)break;q=q-next;if(q)printf(%s_%s_%sn,q-name,q-address,q-num);else printf(无此记录n);void menu() /菜单printf(0.添加记录n);printf(1.查找记录n);printf(2.姓名散列n);printf(3.号码散列n);printf(4.清空记录n);printf(5.退出系统n);int main()char num11;char name8;create();create2();int sel;while(1)(me
18、nu();scanf(%d,&sel);if(sel=1)(printf(6号码查询,7姓名查询n);int b;scanf(%d,&b);if(b=6)(printf(请输入号码:n);scanf(%s,num);printf(-输出查找的信息:n);find(num);else(printf(请输入姓名:n);scanf(%s,name);printf(-输出查找的信息:n);find2(name);if(sel=2)(printf(-姓名散列结果:n);list2();if(sel=0)(printf(请输入要添加的内容:n);apend();if(sel=3)(printf(-号码散列结果:n);list();if(sel=4)printf(列表已清空:n);create();create2();if(sel=6) return 0;return 0;6.2实验心得一周的课程设计今天结束了。很快,收获很多。感觉像是一个从无到有的 过程,非常的充实。 我做的课题是“哈希表问题。根本算法老师在课堂上有涉 及过, 但具体的还要靠自己去钻研。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年四年级英语下册 Unit 11 Do you have a ticket第2课时教学设计 湘少版
- 2026年运动成瘾与情绪调节关系的双向研究
- Unit 7 Carnations for my mother.教学设计小学英语新世纪英语三年级下册-新世纪英语
- 2025-2026学年双新背景下英语教学设计
- 2025-2026学年弱电解质的电离教案
- 2025-2026学年各种各样的鱼科学教案
- 2025-2026学年室内设计图教学视频
- 2025-2026学年常规活动教案进餐
- 一、物质的三态 温度的测量教学设计初中物理苏科版2024八年级上册-苏科版2024
- 学生辍学家访制度
- 大脑卒中急救处理方案
- 广东省化工(危险化学品)企业安全隐患排查指导手册(精细化工企业专篇)
- 7《我不是最弱小的》课件(内嵌音视频)-2025-2026学年二年级下册语文统编版
- 2026吉林大学第二医院合同制护士招聘50人考试参考试题及答案解析
- 催收公司内部应急制度
- 2026年宁夏葡萄酒与防沙治沙职业技术学院自主公开招聘工作人员考试参考试题及答案解析
- GB/T 18494.1-2014变流变压器第1部分:工业用变流变压器
- 小学数学西南师大三年级上册四两位数除以一位数的除法 最新西师大版小学三年级上册数学第四单元两位数除以一位数的除法问题解决精品
- 泛光照明工程技术要求及质量标准
- 北京市各县区乡镇行政村村庄村名明细及行政区划代码
- 油茶籽购销合同书
评论
0/150
提交评论