索引分块查找的实现.pptVIP

  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文档。上传文档
查看更多
索引分块查找程序设计 指导教师: 演讲人: 4 实例演示 3 流程图 2 优点 1 基本思想 索引分块查找 基本思想 分块查找又称索引顺序查找,它是介于顺序查找和折半查找之间的查找方法。 基本思想: 首先将查找表分成若干块,在每一块中数据元素的存放是任意的,但块与块之间必须是有序的; 2. 建立一个索引表,把每块中最大的关键字值按块的顺序存放在一个辅助数组中,这个索引表也按升序排列; 3. 查找时先用给定的关键字值在索引表中查找,确定满足条件的数据元素存放在哪个块中; 4. 再到相应的块中顺序查找,便可以得到查找的结果。 优点 ①在表中插入或删除一个记录时,只要找到该记录所属的块,就在该块内进行插入和删除运算。 ②因块内记录的存放是任意的,所以插入或删除比较容易,无须移动大量记录。 分块查找的主要代价是增加一个辅助数组的存储空间和将初始表分块排序的运算。 分块查找算法的效率介于顺序查找和二分查找之间。 流程图 开始 取索引表有效项数和索引表首址 在索引表中读取数据块的首址和最大值 查找数据=该块最大值? 索引表有效项数比较完否? 读取下一数据块的首址 计算数据元素的个数 用顺序查找法在块内查找 找到否? 查找失败 查找成功 结束 Yes Yes No No Yes No 查找举例 若以索引顺序表表示静态查找表,则可以进行分块查找。 以下就是一个索引顺序表,把长度为18的顺序表分成3块,这三块中的关键字“分块有序”,然后找出每一块的最大关键字,并用指针指示每一块中的第一个记录。 动画演示查找成功 动画演示查找失败 程序演示 int blksearch(record r[],index idx[],keytype key) { int i=0,j; while(iidxN) { if(key=idx[i].key){ break; } else i++; } j=idx[i].low; while(j=idx[i].high) { if(key==r[j].key){ return j;} else j++; } return -1; } 1 7 13 22 48 86 起始地址 最大关键字 9 20 33 42 44 38 24 48 60 53 86 49 74 58 22 12 13 3 索引表 1 2 3 38 返回 查找成功! 关键字为第10个记录 int blksearch(record r[],index idx[],keytype key) { int i=0,j; //i代表索引块地址,j代表表中元素的地址 while(iidxN) { if(key=idx[i].key){ break; } else i++; } j=idx[i].low; while(j=idx[i].high) { if(key==r[j].key){ return j;} else j++; } return -1; } 1 7 13 22 48 86 起始地址 最大关键字 9 20 33 42 44 38 24 48 60 53 86 49 74 58 22 12 13 3 索引表 1 2 3 90 返回 查找失败! 该记录不存在

文档评论(0)

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

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

1亿VIP精品文档

相关文档