数据结构之查找课件PPT.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构之查找课件PPT

数据结构;第八章 查找;要 求 熟练掌握以下内容: 三种基本查找方法的基本思想和算法 二叉排序树查找的基本思想和算法 散列法基本思想、散列函数的常用构造方法及解决冲突方法 了解以下内容: 平衡树及平衡树的调整 B-树查找 ;第八章目录;8.1 查找的基本概念;顺序查找的线性表定义如下: Typedef struct rectype { keytype key; itemtype item1 …… }rectype; ;顺序查找算法;顺序查找算法分析;2.折半查找;比较结果有三种可能: ⑴ 如果r[m].keyk,说明如果存在欲查找的元素,该元素一定在数组的前半部分,查找范围缩小了一半,修改查找范围的的上界high=m-1,继续对数组的前半部分进行二分查找; ⑵ 如果r[m].keyk,说明如果存在欲查找的元素,该元素一定在数组的后半部分,查找范围缩小了一半,修改查找范围的的下界low=m+1,继续对数组的后半部分进行二分查找; ⑶ 如果r[m].key=k,查找成功,m所指的记录就是查找到的数据。;重复上述过程,查找范围每次缩小1/2,当范围不断缩小,出现查找范围的下界大于上界时,则查找失败,确定关键字为key的记录不存在。 ;例:从下列序列中查找K=21的记录;int binsearch(r[], n, k) /*记录存储在r[1…n]中 { int low=1,hig=n, mid; while (low=hig) { mid=(low+high)/2; if (r[mid].key==k) return(mid); else if (r[mid].keyk) low=mid+1; else hig=mid-1; } return(0); } ; 折半查找的分析 折半查找的判定树 平均查找长度 ASL= log2(n+1)-1 查找成功时的最大查找长度为折半查找判定树的深度?log2n? +1, 查找不成功时的最大查找长度也为折半查找判定树的深度?log2n? +1。 ;3.有序表的其它查找方法;8.2.3 分块查找;分块查找的算法分两步进行,首先确所查找的结点属于哪一块,即在索引表中查找其所在的块,然后在块内查找待查的数据。由于索引表是递增有序的,可采用二分查找,而块内元素是无序的,只能采用顺序查找。如果块内元素个数较少,则不会对执行速度有太大的影响。 例如线性表中关键字为:9,22,12,14,35,42,44,38,48,60,58,47,78,80,77,82其索引如图8.1所示。;图8.1 线性表与索引表;索引表的定义;int blksearch (sqlist r, index idx, int k, bn) { /*bn为块的个数*/ int i, j, mid, low=1, high=bn, find=0; while (low=high !find) { /*二分查找索引表*/ mid=(low+high)/2; if (kidx[mid].key) high=mid-1; else if (kidx[mid].key) low=mid+1; else find=1; } ;分块查找算法续;分块查找算法续;分块查找的分析;顺序查找、折半查找、分块查找的比较; 8.3 二叉排序树(BST) 二叉排序树或是一棵空树,或是具有下列性质的树: 若左子树非空, 则左子树上的所有结点都小于其根结点的值; 若右子树非空, 则右子树上的所有结点都大于其根结点的值; 左,右子树也都是一棵二叉排序树. 例 ;结点定义如下: Typedef struct node { keytype key; itemtype others; struct node *lchild, *rchild;

文档评论(0)

djdjix + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档