网站大量收购独家精品文档,联系QQ:2885784924

散列表的计与实现.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
散列表的计与实现

安徽省巢湖学院计算机与信息工程学院 课程设计报告 课程名称 《数据结构》 课题名称 散列表的设计与实现 专 业 计算机科学与技术 班 级 学 号 姓 名 联系方式 指导教师 目 录 1、数据结构课程设计任务书 1 1.1、题目 1 1.2、要求 1 2、总体设计 1 2.1、功能模块设计 1 2.2、所有功能模块的流程图 1 3、详细设计 1 3.1、程序中所采用的数据结构及存储结构的说明 1 3.2、算法的设计思想 2 3.3、稀疏矩阵各种运算的性质变换 2 4、调试与测试: 2 4.1、调试方法与步骤: 2 4.2、测试结果的分析与讨论: 3 4.3、测试过程中遇到的主要问题及采取的解决措施: 3 5、时间复杂度的分析: 4 6、源程序清单和执行结果 4 7、C程序设计总结 8 8、致谢 8 9、参考文献 8 1、数据结构课程设计任务书 1.1、题目 1.2、要求1)设每个记录有下列数据项:电话号码、用户名、地址; 2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; 3)采用一定的方法解决冲突; 4)查找并显示给定电话号码的记录; 5)查找并显示给定用户名的记录。 【进一步完成内容】 1)系统功能的完善; 2)设计不同的散列函数,比较冲突率; 3)在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。2、总体设计 2.1、功能模块设计 根据课程设计题目的功能要求,各个功能模块的组成框图如下:2.2、所有功能模块的流程图 Hash()函数流程图 以姓名为关键字的Hash()函数流程图 添加结点信息流程图: 申请专利开始 按姓名查找流程图: 按号码查找流程图: 主程序流程图 3、详细设计 name[8] num[11] address[20] next 其中name[8]和num[11]是分别为以电话号码和用户名为关键字域(key),存放关键字;address[20]为结点的数据域(data),用来存储用户的地址信息。next指针是用来指向下一个结点的地址。 unsigned int key 和unsigned int key2分别被定义为电话号码和用户名关键字。程序的主要模块如下: ************************程序部分源代码************************* 3.1建立节点 struct node { char name[8],address[20]; char num[11]; node * next; }; typedef node* pnode; //typedef typedef node* mingzi; node **phone; node **nam; node *a; 3.2对散列函数的定义 本程序要设计两个hash()函数,分别对应电话号码和用户名。本设计中对散列函数选择的是除留余数法,即对关键字进行模运算,将运算结果所得的余数作为关键字(或结点)的存储地址,即H(key)=key mod p,本设计中p取20,然后将计算出来的数作为该结点的地址赋给key。具体方法如下:以电话号码为关键字建立哈希函数hash(char num[11])。以用户名为关键字建立哈希函数hash2(char name[8])。利用强制类型转换,将用户名的每一个字母的ASCLL码值相加并且除以20后的余数。将计算出来的数作为该结点的地址赋给key2。 ************************程序部分源代码************************* a) void hash(char num[11]) { key=(int)num[2]; while(num[i]!=NULL) { key+=(int)num[i]; i++; } key=key%20; } b) void hash2(char name[8]) { int i = 1; key2=(int)name[0]; while(name[i]!=NULL)

文档评论(0)

liwenhua11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档