数据结构查找技术1静态查找表.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文档。上传文档
查看更多
章 ;本章的主要内容是:;何谓查找表 ?;对查找表经常进行的操作:;不涉及插入和删除操作的查找 。 涉及插入和删除操作的查找。 ;是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。;50; 根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录)。 ; 由于查找表中的数据元素之间不存在明显的组织规律,因此不便于查找。 为了提高查找的效率, 需要在查找表中的元素之间人为地 附加某种确定的关系,换句话说, 用另外一种结构来表示查找表。;9.1 静态查找表;查找算法的性能 ;9.1 静 态 查 找 表;数据对象D:; Create(ST, n);; 构造一个含n个数据元素 的静态查找表ST。 ;销毁表ST。;若 ST 中存在其关键字等于 key 的数据元素,则函数值为该元素的值或在表中的位置,否则为“空”。 ;按某种次序对ST的每个元素调用函数Visit()一次且仅一次,一旦Visit()失败,则操作失败。;typedef struct { // 数据元素存储空间基址,建表时 // 按实际长度分配,0号单元留空 int length; // 表的长度 } SSTable;;数据元素类型的定义为:;一、顺序查找表; 以顺序表或线性链表表示静态查找表;顺序查找 (线性查找);顺序查找 (线性查找);基本思想:设置“哨兵”。哨兵就是待查值,将它放在查找方向的尽头处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。 ;基本思想:设置“哨兵”。哨兵就是待查值,将它放在查找方向的尽头处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。 ;int SeqSearch2(int r[ ], int n, int k) //数组r[1] ~ r[n]存放查找集合 { r[0] .key = k; i = n; while (r[i].key != k) i--; return i; };平均查找长度较大,特别是当待查找集合中元素较多时,查找效率较低。; 定义: 查找算法的平均查找长度 (Average Search Length) 为确定记录在查找表中的位置,需和给定值 进行比较的关键字个数的期望值 其中: n 为表长,Pi 为查找表中第i个记录的概率, 且   , Ci为找到该记录时,曾和给定 值比较过的关键字的个数。; 在等概率查找的情况下, 顺序表查找的平均查找长度为: ; 若查找概率无法事先测定,则查找过程采取的改进办法是,在每次查找之后,将刚刚查找到的记录直接移至表尾的位置上。; 上述顺序查找表的查找算法简单, 但平均查找长度较大,特别不适用于表长较大的查找表。;折半查找;ST.elem;int BinSearch1(int r[ ], int n, int k) { //数组r[1] ~ r[n]存放查找集合 low = 1; high = n; while (low = high) { mid = (low + high) / 2; if (k r[mid]) high = mid - 1; else if (k r[mid]) low = mid + 1; else return mid; } return 0; };int BinSearch1(int r[ ], int n, int k) { //数组r[1] ~ r[n]存放查找集合 low = 1; high = n; while (low = high) { mid = (low + high) / 2; if (k r[mid]) high = mid - 1; else if (k r[mid]) low = mid + 1; else return mid;

文档评论(0)

勤能补拙 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档