【精品】查找的基本概念.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文档。上传文档
查看更多
【精品】查找的基本概念.ppt

第8章 查找 8.1 查找的基本概念 查找(Search),就是在数据集合中寻找满足某种条件的数据对象。 数据集合,是由同一类型的数据对象构成。每个数据对象,都有若干属性,其中,有一个受到关注的属性,它可以唯一地标识每个对象,那么我们将这个属性称为关键字(Key)。 查找的概念可简化为:根据给定的某个值,在数据集合中查找一个关键字等于给定值的数据对象。查找的结果就是确定数据对象在数据集合的结构中的位置。 第8章 查找 通常有两种可能: 一种可能是查找成功,即找到符合条件的数据对象,作为结果,这时我们可指出该对象在数据集合的结构中所处的位置,进一步可获得对象的全部信息; 另一种可能是数据集合中不存在符合条件的数据对象,则查找失败,作为结果,这时返回的将是一个“空”对象,或者失败位置。 第8章 查找 对于不同的基本数据结构(表、树、图),需要设计和选择不同的查找方法。而查找的算法很大程度上决定了查找的效率。 查找算法的基本操作是将数据对象的关键字与给定的值进行比较,因此,可定义关键字与给定值进行比较的数量的平均值,作为算法度量的依据,这就是平均查找长度(Average Search Length,简记ASL),即 其中,Pi为查找第i个数据对象(即给定值与这结构中第i个数据对象的关键字相等)的概率,Ci为找到第i个数据对象所需的关键字与给定值的比较次数。 第8章 查找 8.2 线性表的查找 基于线性表的查找是最简单的查找。查找算法就是根据给定值,在线性表中进行查找,直到找到键值(key)等于给定值的那个结点并指出其存放位置,或者确定在线性表中找不到这样的结点。 第8章 查找 8.2.1 顺序查找 顺序查找是一种最基本且最直观的查找方法。它的算法思想是:对于线性表中的所有结点,逐个将其关键字与给定值进行比较,若某个结点的关键字与给定值相等,则查找成功,返回所找的结点的位置;若将所有结点的关键字与给定值作比较后仍未有相等者,则查找失败。 对于这种查找方法,结点在线性表中可任意排列,不必考虑它们关键字的大小。 第8章 查找 #define MAXARRAY 100 typedef struct node { int key; // 结点的关键字 char otherdata[80];   // 结点的其他字段 } NODE; NODE  a[MAXARRAY]; int  n; 第8章 查找 算法1 int SeqSearch1(NODE a[ ], int n, int v) { int i; for (i=0; in a[i].key!=v; i++); if (in) return i; return -1; } 第8章 查找 算法2 int SeqSearch2(NODE a[ ], int n, int v) { int i; a[n].key=v; for (i=0; a[i].key!=v; i++); if (in) return i; return -1; } 第8章 查找 算法3 typedef struct lnode {   int key; // 结点的关键字   char otherdata[80]; // 结点的其他字段(属性) struct node * link; // 指向下个结点的指针 } LNODE; NODE * head; LNODE * LinSearch (LNODE * head, int v) { for( ; head!=NULL head-key!=v; head=head-link); return head; } 第8章 查找 顺序查找的平均查找长度有 假定线性表中所有结点都有相同的查找概率, 即对于一切i都有 ,那么 第8章 查找 8.2.2 二分查找 对于顺序存储的有序表,通常可用二分查找(Binary Search)的方法来操作。即考察线性表中间的结点,其关键字若与给定值相等,则查找成功;若大于给定值,则扔掉后半个线性表,在前半个线性表中再实施二分查找;若小于给定值,则下一步二分查找在后半个线性表中进行。一直到查找成功,或确定关键字等于给定值的结点不存在。 第8章 查

文档评论(0)

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

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

1亿VIP精品文档

相关文档