ch8_查找.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文档。上传文档
查看更多
第八章 查找 一、基本概念 查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合。   对查找表经常进行的操作有:   (1)查询某个特定的数据元素是否在表中;   (2)检索某个特定的数据元素的各种属性;   (3)在查找表中插入一个数据元素;   (4)从查找表中删除某个数据元素。 实际应用中查找表通常分两类:一类查找表在使用时主要做前两种统称为“查找”的操作,称为静态查找表(Static Search Table)。   若在对查找表进行查找的过程中,同时需要随时插入当前查找表中不存在的数据元素,或者从当前的查找表中删除已存在的某个数据元素,称为动态查找表(Dynamic Search Table)。 关键字(key):数据元素中某个数据项的值,用它可以标识(识别)一个数据元素。若此关键字可以唯一地标识一个元素,则称此关键字为主关键字(Primary key)。反之,称用以识别若干元素的关键字为次关键字(secondary key)。 查找(searching)根据给定值,在查找表中确定关键字等于给定值的数据元素。若表中存在这样的一个元素,则称查找是成功的,查找的结果为给出整个数据元素的信息,或指示该数据元素在查找表中的位置;若表中不存在这样的元素,则称查找不成功,查找的结果可给出一个“NULL”元素(或空指针)。 平均查找长度:查找过程中,和给定值进行比较的关键字个数的期望值称作查找算法的平均查找长度(Average Search Length)。一般用ASL作为比较查找算法的度量依据,来评价查找算法的时间效率。 查找基本方法: 1.比较式查找: 基于线性表的查找 基于树的查找 2.计算式查找 又称哈希查找法 8.2 线性表上的查找 线性表是最简单的一种查找表的组织方式,一个线性表有若干个记录,各个记录有包含若干个数据项。 顺序查找 有序查找 8.2.1 顺序表——静态查找表实现方法一 查找过程:从表一端开始逐个进行记录的关键字和给定值的比较 算法描述 typedef struct { ElemType *elem; // 数据元素存储空间基址,0号单元留空 int length; // 表中元素个数 } SSTable; int SequelSearch(SSTable ST, KeyType kval) { // 顺序表ST中查找关键字等于给定值的数据元素,若找到, //返回位序,否则返回0   i = 1;    // i 的初值为第1个元素的位序   while (i = ST.length){ if(ST.elem[i].key == kval) break; ++i; }   if (i = ST.length) return i;// 查找成功   else return 0;// 查找失败 } // Search 算法主要操作是进行“判定(关键字的比较)”,其时间复杂度为O (ListLength(ST))。考虑查找不成功的情况,每次进行关键字的比较前,先要判断循环变量 i 是否出界,它将使查找算法的时间几乎增加一倍。   算法8.1.2 利用在0号单元所设的“监视哨”控制住了循环变量 i 的出界,即在查找表中不存在其关键字等于给定值的数据元素时,i 必等于0, 这样的处理并不影响查找成功的情况。 //设置监视哨的顺序查找算法 int SequelSearch (SSTable ST, KeyType kval) {  // 在顺序表ST中顺序查找其关键字等于 kval 的数据元素,  // 若找到,则函数值为该元素在表中的位置,否则为0 ST.elem[0].key = kval;  // 设置“哨兵” i=ST.length; while(ST.elem[i].key != kval) --i; // 从后往前查找 return i; //返回找到元素在表中的位置, 找不到时,i 为0 }                 顺序查找的优缺点 优点 算法简单且适应面广,它对表的结构无任何要求,无论记录是否按关键字有序均可应用。 缺点 平均查找长度较大,特别是当 n很大时,查找效率较低。 8.2.2 有序表——静态查找表实现方法二 顺序表中的数据元素按关键字有序排列,可“折半查找”。 查找过程:每次将待查记录所在区间缩小一半 设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low=1,high=n,mid=?(low+high)/2? 让k与mid指向的记录比较 若k==r[mid].key,查找成功 若kr[mid].key,则high=mid-1 若

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档