- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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取最小值。这个值比顺序查找有了很大改进,但远不及折
您可能关注的文档
最近下载
- JTS 133-2013水运工程岩土勘察规范.docx VIP
- 工程设计方案科学合理(3篇).docx
- 电子元器件选型要求规范实用经典要点.docx
- 慢性病综合防控示范区建设培训PPT课件.ppt
- 医疗器械独立软件(符合ISO 13485、MDR、FDA 21 CFR Part 820)软件配置控制程序2025年.docx
- sg500mx sg630mx sgxxhv光伏并网逆变器通信协议.pdf
- 湖北省荆门市2022年中考[生物]考试真题与答案解析.pdf VIP
- 国际贸易公司办公室主任职责.docx VIP
- 2025年高考数学模拟试卷01(九省新高考新结构卷)及答案.docx VIP
- 码垛机机械手的整体设计论文大学毕设论文.doc
文档评论(0)