哈希表的设计与实现数据结构与算法课程设计报告ub5n1eu8.docVIP

哈希表的设计与实现数据结构与算法课程设计报告ub5n1eu8.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈希表的设计与实现数据结构与算法课程设计报告ub5n1eu8

合肥学院 计算机科学与技术系 课程设计报告 2009 ~2010 学年第二学期 课程 数据结构与算法 课程设计名称 哈希表的设计与实现 学生姓名 王东东 学号 0804012030 专业班级 08计本(2) 指导教师 王昆仑、李贯虹 2010 年 5 月 课程设计目的 “数据结构与算法课程设计”是计算机科学与技术专业学生的集中实践性环节之一,是学习“数据结构与算法”理论和实验课程后进行的一次全面的综合练习。其目的是要达到理论与实际应用相结合,提高学生组织数据及编写程序的能力,使学生能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能。 一、 问题分析和任务定义 1、 问题分析 要完成如下要求:设计哈希表实现电话号码查询系统。 实现本程序需要解决以下几个问题: (1) 如何定义一个包括电话号码、用户名、地址的节点。 (2) 如何以电话号码和用户名为关键字建立哈希表。 (3) 用什么方法解决冲突。 (4) 如何查找并显示给定电话号码的记录。 (5) 如何查找并显示给定用户名的记录。 2 任务定义 1、由问题分析知,本设计要求分别以电话号码和用户名为关键字建立哈希表,z在此基础上实现查找功能。本实验是要我们分析怎么样很好的解决散列问题,从而建立一比较合理的哈希表。由于长度无法确定,并且如果采用线性探测法散列算法,删除结点会引起“信息丢失”的问题。所以采用链地址法散列算法。采用链地址法,当出现同义词冲突时,可以使用链表结构把同义词链接在一起,即同义词的存储地址不是散列表中其他的空地址。 根据问题分析,我们可以定义有3个域的节点,这三个域分别为电话号码char num[30],姓名char name[30],地址char address[30]。这种类型的每个节点对应链表中的每个节点,其中电话号码和姓名可分别作关键字实现哈希表的创建。 二、 数据结构的选择和概要设计 1、数据结构的选择 数据结构:散列结构。 散列结构是使用散列函数建立数据结点关键词与存储地址之间的对应关系,并提供多种当数据结点存储地址发生“冲突”时的处理方法而建立的一种数据结构。 散列结构基本思想,是以所需存储的结点中的关键词作为自变量,通过某种确定的函数H(称作散列函数或者哈希函数)进行计算,把求出的函数值作为该结点的存储地址,并将该结点或结点地址的关键字存储在这个地址中。 散列结构法(简称散列法)通过在结点的存储地址和关键字之间建立某种确定的函数关系H,使得每个结点(或关键字)都有一个唯一的存储地址相对应。 当需要查找某一指定关键词的结点时,可以很方便地根据待查关键字K计算出对应的“映像”H(K),即结点的存储地址。从而一次存取便能得到待查结点,不再需要进行若干次的比较运算,而可以通过关键词直接计算出该结点的所在位置。 2、概要设计 (1)、哈希表的定义 结点的数据类型: struct node //定义 姓名 地址 电话号码 { char name[30]; char address[30]; char num[30]; node * next; }; ElemNode; (2)、哈希地址的计算 以姓名为关键字的哈希地址计算:从取得的姓名第二个字母开始,取ASCII码累加,对30求余得所求哈希地址 以电话号码为关键字的哈希地址计算:从号码第二位开始,将所有号码累加之后对30求模得哈希地址 (3)、拉链法 链地址法:在散表结构存放在指针指向的单元中。链地址法在解决冲突时,使用链表结构把同义词链接在一起,即同义词的存储地址不是散列表中其他的空地址。 采用C语言定义如下: #define Max_length 100 Typedef struct{ int key; ElemType data; ElemNode *next; }ElemNode; Typedef struct{ ElemNode *first; }ElemHeader,HashTable[Max_length]; 所有的同义词构成一个单链表,再由一个表头节点指向这个单链表的第一个节点。这些镖头节点组成一个一维数组,即散列表。数组元素的下标对应由散列函数求出的散列地址。 拉链法处理冲突的散列表结构 and ^army and ^ army breeze ^buy 1 breeze ^ buy boy 2 boy egg ^ egg ^ each 5 each hash ^ hash ^ … … … (4)链地址法

文档评论(0)

beoes + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档