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

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

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

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

文档评论(0)

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

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

1亿VIP精品文档

相关文档