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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(Hash表的建立和查找Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Hash表的建立和查找Word文档格式.docx

1、7月7日 验收程序,提交设计报告书。指导教师签名: 2007年7月2日系主任(或责任教师)签名:摘要: 本人设计了一个Hash表的建立和查找系统,其主要功能是,用户可以手工输入Hash表元素个数和各个元素的数据内容,系统便相应地建立一个Hash表,(输入错误时,系统会显示输入错误,并提示重新输入);可对已建立的Hash表进行多次查找,系统打印查找到的信息,用户可以按提示信息退出系统。Hash表采用结构体数组进行存储,Hash函数由除留余数法建立,冲突的解决采用线性探测。关键字: Hash表,结构体数组,除留余数法,线性探测0.引言随着时代的进步,科技的发展,信息时代已经来临,在这样的时代背景之

2、下,人们迫切需要对信息进行存储和查找,而数据结构成为了信息技术中极为重要的一门学科,发挥着关键作用。信息资料之多之杂之广,使如何存储和高效查找信息成为了一个很严肃的问题。本次课程设计中,我设计了一个小程序对用户输入的数据利用Hash表进行存储。存储完成后,用户可利用Hash表查找数据,速度十分快,可多次查找,也可按提示信息退出。1.需求分析本次课程设计需要实现Hash表的建立和查找,具体内容如下:1.1 Hash 表的建立建立Hash函数,从而根据用户输入的数据元素个数和各元素的值建立Hash 表,即数据的添加和存储。如果输入的元素个数超出规定范围,则打印出错信息,并提示重新输入信息。1.2

3、Hash 表的查找Hash表建立好之后,用户可以输入想要查找的值,屏幕显示相应信息。如果存在此值,屏幕显示该值信息;如果不存在,则显示该值不存在;如果想退出系统,则按提示输入命令。2.数据结构设计2.1定义结构体typedef struct int key; /定义关键字 int cn; /定义查找次数cnhashtable; /定义哈希表类型2.2定义结构体数组hashtable hthm; /定义哈希表空间3.算法设计3.1 Hash函数该函数利用除留余数法实现“Hash 函数”#define m 19 /不大于表长的最大质数Status h(keytype key) /哈希函数 retu

4、rn(key%m); /除留余数法/h3.2信息查找函数 这个函数能查找信息,它既能用于查找所输入信息,又能在建立Hash的时候被建立Hash表的函数调用。用户可以输入想要查找的值,屏幕显示相应信息。Status HashSearch(hashtable ht,keytype key) /哈希表查找函数 int d,i; i=0; d=h(key); /求哈希地址 =0; /记录元素被查找的次数 while(htd.key!=key)&(htd.key!=free)&(i=hm) /Hash表已满,插入失败,返回unsuccess printf(The hashtable is full!n)

5、; return(unsuccess); return(d); /若hd的关键字等于key说明查找成功/hashsearch3.3数据输入函数此函数能够对用户输入的数据进行处理,即将输入数据插入Hash表中。它调用了Hash函数。如果插入成功,显示插入成功信息;如果插入不成功,则显示插入不成功信息。Status HashInsert(hashtable ht,keytype key) /哈希插入函数,插入成功返回success,插入不成功返回unsuccess /查找不成功的时候,将给定关键字key插入哈希表中 int d; d=HashSearch(ht,key); if(htd.key=f

6、ree) /插入成功 htd.key=key;Insert success! return(success); else /插入不成功Uneuccess! /HashInseart3.4建立Hash表函数此函数能够根据用户输入的数据建立Hash表,并将所有数据存入表中。如果输入数据不和理(即输入的数据长度大于或等于表长,或小于0),屏幕会提示错误信息,并提示用户重新输入正确的数据值;如果输入数据合理(即输入的表长大于等于0,小于表长),用户就可以按提示信息输入表元素,哈希表就会被成功建立。Hash表的建立也利用了除留余数法,所以该函数调用了哈希表插入运算函数。void HashCreat(ha

7、shtable ht) /根据用户输入的信息建立一个哈希表 int n; int i; int key1; printf(Input the number of the elements(less than the length of the list %d and no less than 0):,hm); /提示输入规定范围内的长度 scanf(%d,&n); /输入表长 if(n=20) /输入不合理的表长度Please input a length less than 20:/表长大于等于20 else if(n0) printf(Please input a length no le

8、ss than 0:/表长小于0 while(n=20) /输入表长度合理 scanf( if(n=20) /表长大于等于20 /表长小于0 for(i=0;in;i+) /依次插入用户输入的各个元素的数据Input the key word:key1); /输入元素数据 HashInsert(ht,key1); /调用哈希表插入运算/HashCreat3.5主要界面的设计void jiemian()/主界面设计 hashtable ht0hm; /分配Hash表的空间 int key0=0; /初始化为0 float key1=0; /初始化为0 Build the hash list: /

9、提示建立信息 HashCreat(ht0); /建立Hash表Now you can search in the hash list: /提示用户查找Input the key word of the element required to searchn(If you want to exit ,input a figure bigger than 0 and small than 1.):%f /输入想要查找的数据 key0=(int)key1; while(key1-(float)key0)=0)/多次查找输入的数据,系统显示相应结果/按提示退出系统 i=HashSearch(ht0,k

10、ey0); if(ht0i.key=key0) /存在该元素时%d exists in the list.n ,key0); /打印存在信息Its pose is num.%dnn,i); /打印元素位置 elseThere is no %d in the list.nnprintf( /提示用户退出 /用户继续输入数据 /key0是key1的整数部分/jiemian3.6其他有关技术讨论我这个程序选用结构体数组为存储结构,实现了Hash表的数据存储。Hash表查找给予一种尽可能不通过比较操作而直接得到记录的存储位置的想法而提出的一种特殊查找技术。它的基本思想是通过记录中关键字的值key为自变

11、量,通过某一种确定的函数h,计算出函数值h(key)作为存储地址,将相应的关键字的记录存储到对应的位置上。而在查找是仍需要用这个确定的函数h进行计算,获得所要查找的关键字所在的记录的存储位置。除留余数法(Division Method)是用关键字key除以某个正整数M,所得余数作为哈希地址的方法。对应Hash函数H(key)为:h(key)=key % M,一般情况下M 的取值为不大于表长的质数。开放定址发解决冲突,形成下一个地址的形式是: Hi=(h(key)+di)%M i=1,2,k(k=m)其中,h(key)为哈希函数,M为某个正整数,di为增量序列。线形探测再散列,是将开放定地址发中

12、的增量di设定为一系列从1开始一直到表长减1的整数序列:1,2,3,,m-1(m为表长)。本系统对用户在操作时可能进行的错误和违规操作,给出了基本的提示信息和解决方案,以便用户在非法操作后得到意想不到的结果,即在根据用户输入的数据建立Hash表并将所有数据存入表中时。本系统对用户在操作时可能进行的错误和违规操作,给出了基本的提示信息和解决方案,以便用户在非法操作后得到意想不到的结果。4.程序的实现4.1所有的函数声明int h(int key)int HashSearch(hashtable ht,int key)int HashInsert(hashtable ht,int key)void

13、 HashCreat(hashtable ht)4.2主要方法的代码实现4.2.1哈希表查找函数 /*哈希表查找函数*/ /*求哈希地址*/hm) /*寻找下一个单元*/ /*寻找次数加1*/ /*线性探测记录的插入位置*/=hm) /*若hd的关键字等于key说明查找成功*/*hashsearch*/4.2.2哈希插入函数 /*哈希插入函数*/ /*查找不成功的时候,将给定关键字key插入哈希表中*/ if(htd.key=free) /*插入成功*/ /*插入不成功*/*HashInseart*/4.2.3哈希表建立函数 /*建立哈希表的函数*/=20) /*输入不合理的表长度*/=20)

14、 /*输入表长度合理*/i+) /*调用哈希表插入运算*/*HashCreat*/4.3程序运行结果4.3.1运行界面4.3.2输入出错提示界面4.3.3输入元素超过Hash表表长届面4.3.4输入正确建立Hash表提示界面4.3.5根据提示建立Hash表界面4.3.6输入查找数据得到显示数据界面4.3.7表中无输入数据时的界面4.3.8用户可按提示信息退出系统界面4.4结果分析用户手工输入数据并对输入数据建立Hash表,具有提示错误功能;另外就是对已建立的Hash表进行查找,具有多次查找功能,并打印信息,可以按提示信息退出系统。本系统采用了Hash表存储,查找速度极其快,查找的时间复杂度为O

15、(1)。本系统仍然存在一些不足之处值得改进,例如:在建立Hash表的过程中,如果用户想退出系统,也不得不在建立好Hash表之后,才能实现。5.设计体会通过这次做课程设计,使我对数据结构这门课的认识更进一步,这门课确实是学好计算机程序设计的基础。与此同时,自己对程序设计中应该注意的一些问题也有了自己的一些想法。首先,一个程序要达到正确性,可读性,健壮性,高效率和低存储量的要求,这样用户在使用程序的时候才会更加满意,程序才能得到更多的关注。其次,要养成良好的编程习惯,在做一个程序之前,要对该程序的存储结构,抽象数据类型和应该具备的功能以及各模块之间的调用关系有一个总体的把握,画出必要的算法流程图或

16、写出必要的伪码来表示各模块应该具备的功能。再次,在编写程序的过程中应该对一些难于理解的地方加上必要的注释,这样会使在之后的调试与维护阶段更加容易,在定义功能函数与变量时应该尽量采取有表征意义的名称,这样也可达到见名知意的效果。最后,在程序的调试阶段,应该针对程序中用户可能进行的错误操作给出解决的方法,要尽量选出几组具有毁灭性的数据来进行测试,在程序不能正常处理的情况下要采取一些方案使这样的问题得以解决。做程序是一个比较累的工作,特别是当遇到困难时,程序通不过时,真的很令人沮丧。但是改正一个错误时,那种喜悦心情也很令人期盼,这种心情堪比久旱见甘霖的喜悦。就是因为有这种令人身心愉悦的可能,我才得以

17、能够整晚不睡来改程序中的不足之处。编程中有苦有乐,其中的苦乐只有亲身经历才能体会到。要想做出好的程序,必须做好忍受其间痛苦的准备。通过这个星期的课程设计,我的收获还是不少。我的c语言水平有了比较大的提高,其中c语言关于指针,链表的操作理解的比以前深刻不少。另外是数据结构方面的提高,对存储结构,及各种查找排序方面也有不少的提高。虽然我做的程序里还有写问题,做的不够深入,但独立完成一个比较大一点的程序的经历也是很宝贵的。6.结束语程序用turboc实现. 通过本次课程设计,使我对数据结构这门课的认识更进一步,数据结构作为计算机专业的一门必修课,对如何编写好的算法进行了比较深入的阐述,为我们写出正确的,强壮的代码奠定了基础。在做课程设计的过程中,从查阅的相关资料和问题的解决中学到了不少的知识,因此对课本上的知识也有了更深入的了解。在此,深深的感谢任课教师和辅导老师对我的的热心帮助,也感谢广大同学们的关心和帮助参考文献1 严蔚敏,吴伟民.数据结构,清华大学出版社,2001年1月2 刘怀亮.数据结构习题解析与实验指导,冶金工业出版社 ,2005年2月3 谭浩强.数据结构,清华大学出版社,1999年12月

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1