数据结构第八章 查找.docVIP

  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文档。上传文档
查看更多
第八章 查找 一、散列表的应用——通信录管理 1.题目要求: 采用散列表结构,实现通讯录管理。要求采用散列表的拉链法解决冲突,设计实现通讯录管理中的插入、查找、删除、修改和遍历操作。 2.算法分析: 1.设计采用散列表的静态链地址法解决冲突。 线性数组链表的结构体代码如下: typedef struct{ ????? ??char key;???????????? /*键值*/ ?????? ? TXNode *next;???? ?? ??????/*链域*/ ?????? }TXhead; 它包含一个键值和一个链域的指针。 链域的结构体代码如下: typedef struct Node{ ? ? char name[20]; ? ? int phone; ? ? char addre[50]; ? ? char email[35];??? ?????? ???? /*记录信息*/ ? ? struct Node *adjv;?????? /*邻域*/ ?????????? }TXNode; 它包含联系人的姓名、电话、地址和E-mail的信息存储变量,以及下一个链域的指针。 2.设计功能流程如下:? 1)启动运行程序显示菜单界面。以菜单形式列出各个功能,及对应的序列关键字。 2)提示输入所要进行插入、查找、删除、修改或遍历操作的序号并进行确认。 3)进入所选功能模块根据提示做进一步插入、查找、删除、修改或遍历的操作,并进行确认。 4)确认后返回菜单界面,然后回到第二步或者选择退出,并进行确认。 5)退出程序。 二、查找综合练习 1.题目要求: 查找综合练习: 要求能实现顺序表的三种查找算法:顺序查找,二分查找,分块查找: 一.需要建立的函数: 1.为了实现顺序查找或者二分查找,输入元素建立线性表的函数create 2.顺序查找算法seqsearch 3.二分查找算法(必须对1建立的线性表先排序,再用二分查找)searchbin 4.为了实现分块查找,输入元素建立线性表的函数creatF ??要求在输入元素过程中,同时要建立起索引表 5.分块查找算法blocksearch 二.运行时通过菜单来选择进行什么操作 ============================ ???1:为顺序查找或二分查找建立线性表 ???2:顺序查找线性表?? ???3:二分查找线性表 ???4:为分块查找建立线性表 ???5:分块查找线性表 ???6:退出系统 ============================ 2.算法分析: 1.定义线性表 typedef?int?KeyType; typedef?struct{ ?KeyType??key; }NodeType; typedef?NodeType?SeqList[MAXSIZE+1]; 2.分块查找时,定义的索引表 typedef?struct { ??KeyType?key; ??int?staddr;??????????/*?表示开始地址?*/ ??int?len;?????????????/*?表示块长度?*/ }indexlist; typedef??indexlist?ID[MAXID+1]; 3.建立分块查找时的线性表 假设以’#’作为线性表输入结束的标记,以’@’作为块结束的标记。输入数据为ch while(输入不为#) ??{???假设每一块的初始最大值max为0 ??????每一块的初始长度length为0 ??????while(输入不为@) ???????????{?如果此次输入ch值比前一块的最大值小(即存储在in[k-1].key中的数值小),则提示用户重新输入; ?????????????否则的话,?{判断此次输入是否比max大,如果比max大,则max=ch; ??????????????????????????然后把此次输入值ch放在线性表中r[i].key=ch; ???????????????????????????块的长度增加1; ???????????????????????????线性表的长度也增加1;} ???????????} ?????如果输入为@,表示一块已经结束。此时把块中的最大值max赋值给id[k].key,length赋值给块的长度id[k].len ?????再开始下一块的输入。 ??} 4.分块查找 ?可以先通过二分查找索引表id,确定元素所在的块。 ?再通过块的首地址id[k].staddr再去顺序扫描具体的某一块的所有元素。 三、二叉排序树 1.题目要求: 二叉排序树综合练习: 要求能实现二

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档