武汉理工数据结构课设.docxVIP

  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设计 2. 1存储结构设计 2主要算法设计 2. 3测试用例设计 3调试报告 1调试过程中遇到的问题的解决 3. 2对设计和编码的讨论和分析 4经验和体会 4.1收获 2对算法改进的设想 5附源程序清单和运行结果 5. 1源程序代码 122运行结果与分析 12 参考文献 索引顺序查找 1问题描述 这个课程设计的题目是“索引顺序查找”,其实就是分块查找是介于顺序查 找和折半查找之间的查找方法。将数据分别放入几个块中,其中块之间是有序 的,即前边的最大数小于后边的最小数,块内数据可以是无序的。编写出一个 能进行索引顺序查找的程序,要求能自动建立索引表;对任意待查找的关键字, 若查找成功,给出其关键字比较次数;测试用例自己设计。 我的设计思想是建立一个数组用来存放数据,所存放的数据之间是按块有 序的,所以设计之前要想好自己怎样分块。每个数据都只有自己的地址address, 每块内都有一个最大值max。比较关键字key时先比较最大值,符合条件后再 进入块内比较。不管所比较的关键字在比较关键字时是不是恰好和最大值相等, 都要进入块再重新比较,并且从相应块的首地址开始比较,然后向后依次比较。 从比较一开始,就会有一个计数关键字count开始计数。 因此,分块查找过程需分两步进行。先确定待查记录所在的块(子表),然后在块 中顺序查找。假设给定值key=38,则先将key依次和索引表中各最大关键字进行 比较,因为22key48,则关键字为38的记录若存在,必定在第二个子表中, 由于同一索引项中的指针指示第二个子表中的第一个记录是表中第7个记录,则 自第7个记录起进行顺序查找,直到L.data[10]=key为止。假如此子表中没有关键 字等于key的记录(例如:key=29时自第7个记录起至第12个记录的关键字和key 比较都不等),则查找不成功。 索引顺序查找的性能分析: 分块查找的平均查找长度为: 其中,D为查找索引表确定所在块的平均查找长度 Zir为在块中查找元素的平均查找长度。 若用顺序查找的方法确定所在的块,贝!h V JSbI O IhI £ A o 若用折半查找确定所在的块,贝!h AS%= £?+^ = +丄办=扇叫A些罟 S u 2 £ 2设计 2.1存储结构设计 这个程序首先用到了2个结构体,typedef struct {datatype data[Maxsize]; int length;] list; typedef structf datatype max;int address;}index 分另U表 示定义索引表、定义块表。其中key表示待查找的索引值;max表示块内索引的 最大值,即为最大关键字,address为块内第一个索引的地址;datasize表示数组 所能容纳的最多元素, 所能容纳的最 多元素,length表示表内元素的个数。 在创建块表时,int intput (list *L, index *index),定义了L为list的引用, index为index的数据成员。先将表的长度L-length定义为0,每输入一个数,表长 度随之加1,然后输入要建的块数,并且输入每个块的首地址。指明每个块的最大 值,以便在下一个函数indexsearch中直接将key与最大值进行比较。 在查找时,我定义了 函数int indexsearch(list Ljndex index[]9int len^datatype key),现将关键字key与每一块的最大index[i].key进行比较,从第一块开始,依次向 后比较,当计数器i超过块的个数时,返回?1;当符合条件ivlenkeyindex[i]?max时, 进入块进行比较。从当前块的首地址元素开始依次向后比较。无论是比较最大值还是比 较块中元素,比较次数计数器count—直在计数。当存在块中元素与关键字相等时,输 出关键字的比较次数conn併且返回当前元素的地址addresso若当前块中没有元素与关 键字相等,返回?1? 2.2主要算法设计 为了体现程序的简单与高效,我将程序最终到造成了只用两个函数就完成了 主要功能的实现,在函数index中输入所有数据元素与地址和要分的块数,以及 每一块的最大值。在函数indexsearch中实现了关键字的比较,其中包括关键字 与最大元素的比较和响应块中每个元素的比较,直到找到相应元素为止。而且 比较次数与相应元素的地址也在这个函数中体现出来。 根据索引顺序査找的原理,得知分块查找需两步进行,要先确定待查所在的 块(子表),然后在块中顺序查找,所以至少需要两个查找函数。查找块函数可 用折半查找或者顺序查找。 一般情况下进行分块查找,可以将长度为n的表均匀地分成b块,每块含有 s个记录,即b= rn/s^ ;假

文档评论(0)

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

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

1亿VIP精品文档

相关文档