(10.1)--数据结构第8章查找.pdf
《(10.1)--数据结构第8章查找.pdf》由会员分享,可在线阅读,更多相关《(10.1)--数据结构第8章查找.pdf(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第8章章 查找查找提提 纲纲查找基本概念及查找基本概念及顺序查找顺序查找有序表的查找有序表的查找二叉排序树(二叉排序树(1)二叉排序树(二叉排序树(2)平衡二叉树平衡二叉树哈希表哈希表(1)哈希表哈希表(2)基本概念基本概念查找表查找表:是由:是由同一类型同一类型数据元素数据元素(或记录或记录)构成的构成的集合集合。四种操作四种操作:查询查询,检索检索,插入插入,删除删除静态查找表静态查找表:只有:只有查找操作查找操作动态查找表动态查找表:四种操作:四种操作查找查找:根据给定的某个:根据给定的某个值值,在查找表中在查找表中确定确定一个关键字等于一个关键字等于给定值的记录或数据元素给定值的记录
2、或数据元素。查找查找成功成功查找结果查找结果查找查找不成功不成功关键字关键字:是数据元素:是数据元素(或记录或记录)中某个中某个数据项的值数据项的值,用它可用它可以以标识标识(识别识别)一个数据元素一个数据元素(或记录或记录)。典型的关键字类型定义有:典型的关键字类型定义有:typedefint KeyType;整型整型typedef char*KeyType;字符串字符串数据元素类型数据元素类型定义为:定义为:typedef structKeyType key;.ElemType;三个三个比较函数比较函数:EQ(a,b),LT(a,b),LQ(a,b);静态查找表静态查找表顺序表的查找顺序表
3、的查找typedef struct ElemType*elem;int length;SSTable;SSTable ST;for(i=1;i ST.length)return(0);else return(i);顺序查找顺序查找监视哨监视哨:免去:免去了查找过程中了查找过程中每一步都要检每一步都要检测扫描是否越测扫描是否越界界。int Search_Seq(SSTable ST,KeyType key)ST.elem0.key=key;for(i=ST.length;!EQ(ST.elemi.key,key);-i);return(i);查找算法性能分析查找算法性能分析定义定义:为了确定记录
4、在查找表中的位置:为了确定记录在查找表中的位置,需和给定值进行比较的关需和给定值进行比较的关键字个数的期望值键字个数的期望值称为查找算法在称为查找算法在查找成功时查找成功时的的平均查找长度平均查找长度。niiiCPASL1其中:其中:Pi为在查找表中为在查找表中查找第查找第i个记录的概率个记录的概率;Ci为找到第为找到第i个记录个记录的的比较次数比较次数;ai查找成功要和关键字比较查找成功要和关键字比较n-i+1次,设每个数据元素查找次,设每个数据元素查找概率相等,查找成功的概率相等,查找成功的平均查找长度平均查找长度:nininnASL121)1(1查找不成功:查找不成功:n+1顺序查找性能
5、分析顺序查找性能分析提提 纲纲查找基本概念及查找基本概念及顺序查找顺序查找有序表的查找有序表的查找二叉排序树(二叉排序树(1)二叉排序树(二叉排序树(2)平衡二叉树平衡二叉树哈希表哈希表(1)哈希表哈希表(2)有序表的查找有序表的查找折半查找折半查找:先确定待查记录所在的:先确定待查记录所在的范围范围(区间区间),然后逐步然后逐步缩小范缩小范围围直到找到或找不到和给定值相等的记录为止直到找到或找不到和给定值相等的记录为止。int Search_Bin(SSTable ST,KeyType key)low=1;high=ST.length;*0号单元未用号单元未用while(low50)时时,A
6、SL成功成功=log2(n+1)-1ASL失败失败=h=log2(n+1)hjjnnnjnASL1211)1(log12*1提提 纲纲查找基本概念及查找基本概念及顺序查找顺序查找有序表的查找有序表的查找二叉排序树(二叉排序树(1)二叉排序树(二叉排序树(2)平衡二叉树平衡二叉树哈希表哈希表(1)哈希表哈希表(2)动态查找表动态查找表特点特点查找表本身是在查找过程中查找表本身是在查找过程中动态生成的动态生成的(插入或删除插入或删除),即对于给定值即对于给定值key,若表中存在其关键字等于若表中存在其关键字等于key的记录的记录,则则查找成功查找成功返回;返回;否则插入关键字等于否则插入关键字等于
7、key的记录的记录。二叉排序树二叉排序树二叉排序树二叉排序树(Binary Sort Tree):或者是一棵:或者是一棵空树空树;或者是具有;或者是具有下列性质的二叉树:下列性质的二叉树:(1)若它的左子树不空若它的左子树不空,则则左子树左子树上所有结点的上所有结点的值均小于值均小于根结根结点的值;点的值;(2)若它的右子树不空若它的右子树不空,则则右子树右子树上所有结点的上所有结点的值均大于值均大于根结根结点的值;点的值;(3)它的它的左左、右子树也分别是二叉排序树右子树也分别是二叉排序树;二叉排序树示例二叉排序树示例二叉排序的查找二叉排序的查找if(!T)|EQ(key,T-data.ke
8、y)return(T);else if LT(key,T-data.key)return(SearchBST(T-lchild,key);else return(SearchBST(T-rchild,key);typedef struct BiTNodeElemTypedata;struct BiTNode*lchild,*rchild;BiTNode,*BiTree;查找过程查找过程BiTree SearchBST(BiTree T,KeyType key)*若查找成功返回指向该记录结点的指针若查找成功返回指向该记录结点的指针,否则返回否则返回NULL思考题思考题:用递推的方式实:用递推的方
9、式实现以上算法现以上算法二叉排序树的插入二叉排序树的插入插入插入:新插入的结点一定:新插入的结点一定是一个是一个新添加的叶子新添加的叶子,并且是并且是查找不成功查找不成功时时,查找路径上访查找路径上访问的问的最后一个结点的左孩子或最后一个结点的左孩子或右孩子右孩子。实现细节实现细节:需要修改查找:需要修改查找过程过程,使使查找不成功查找不成功时时,返回返回查找路径上查找路径上最后一个访问的结最后一个访问的结点点。Status SearchBST(BiTree T,KeyType key,BiTree f,Bitree&p)*若查找成功若查找成功p指向该记录结点指向该记录结点,否则否则p指向查找
10、路径上访问的最后一个结点指向查找路径上访问的最后一个结点*指针指针f始终指向当前始终指向当前T(根结点根结点)的双亲的双亲,查找失败时查找失败时,f指向查找路径上访问的指向查找路径上访问的最后一个结点最后一个结点if(!T)p=f;return False*p可能为可能为NULL?else if EQ(key,T-data.key)p=T;return True;else if LT(key,T-data.key)return(SearchBST(T-lchild,key,T,p);else return(SearchBST(T-rchild,key,T,p);Status InsertBST
11、(BiTree&T,ElemType e)if(!SearchBST(T,e.key,NULL,p)s=(BiTree)malloc(sizeof(BiTNode);s-data=e;s-lchild=s-rchild=NULL;if(!p)T=s;else if LT(e.key,p-data.key)p-lchild=s;else p-rchild=s;return True;ifelse return FALSE;中序遍历二叉中序遍历二叉排序树排序树可得到一个可得到一个关键字的有序序列关键字的有序序列,可以说可以说,一个无序一个无序序列通过构造一棵序列通过构造一棵二叉排序树而变成二叉排序
12、树而变成一个一个“有序序列有序序列”,构造过程即为排序构造过程即为排序过程过程。提提 纲纲查找基本概念及查找基本概念及顺序查找顺序查找有序表的查找有序表的查找二叉排序树(二叉排序树(1)二叉排序树(二叉排序树(2)平衡二叉树平衡二叉树哈希表哈希表(1)哈希表哈希表(2)二叉排序树的删除二叉排序树的删除二叉排序树的删除二叉排序树的删除假设假设:p指向被删除的的结点指向被删除的的结点,f指向其双亲结点指向其双亲结点,且不失一且不失一般性般性,设设p是是f的左孩子的左孩子。分分三种情况来讨论三种情况来讨论:若若*p结点为结点为叶子结点叶子结点,直接删除直接删除。f-lchild=NULL;若若*p结
13、点结点只有只有左子树左子树PL或者只有右子树或者只有右子树PR,f-lchild=p-lchild;或或 f-lchild=p-rchild;若若*p结点结点左右子树均不空左右子树均不空中序遍历该二叉排序树得到序列为中序遍历该二叉排序树得到序列为.CLC.QLQSLSPPRF.(有序序列有序序列),删除后应保持序列中其它元素之间的相删除后应保持序列中其它元素之间的相对位置对位置不变不变,有有两种两种做法:做法:其一其一,令令*p的左子树为的左子树为*f的左子树的左子树,*p的右子树为的右子树为*s的右子树;的右子树;(可能可能导致二叉排序树变深导致二叉排序树变深)其二其二,令令*p的的直接前驱
14、直接前驱(或直接后继或直接后继)替代替代*p,然后再从二叉然后再从二叉排序树中排序树中删去它的直接前驱删去它的直接前驱(直接后继直接后继),算法算法9.8采取第二种采取第二种方法;方法;二叉排序树的查找性能分析二叉排序树的查找性能分析因为二叉排序树的形态和构造时的关键字序列有关因为二叉排序树的形态和构造时的关键字序列有关,不同的不同的构造序列生成不同形态的二叉树构造序列生成不同形态的二叉树。例例:(45,24,53,12,37,93)和和(12,24,37,45,53,93)所构成的二叉排序树如图所构成的二叉排序树如图1和和2所示所示。提提 纲纲查找基本概念及查找基本概念及顺序查找顺序查找有序
15、表的查找有序表的查找二叉排序树(二叉排序树(1)二叉排序树(二叉排序树(2)平衡二叉树平衡二叉树哈希表哈希表(1)哈希表哈希表(2)平衡二叉树平衡二叉树又称为又称为AVL树树。它或者是一棵空树它或者是一棵空树,或者是具有下列性质的或者是具有下列性质的二叉树二叉树:它的左子树和右子树它的左子树和右子树都是平衡二叉树都是平衡二叉树,且它的左子树和右且它的左子树和右子树的子树的深度之差的绝对值不超过深度之差的绝对值不超过1。平衡因子平衡因子:二叉树:二叉树的左子树深度与右的左子树深度与右子树深度差子树深度差。若是若是平衡二叉树平衡二叉树,其其所所有结点有结点的平衡因子的平衡因子只能是只能是(-1,0
16、,1)二叉排序树失衡的调整二叉排序树失衡的调整初始时初始时,空树空树,空树是一棵平衡二叉排序树空树是一棵平衡二叉排序树,伴随插入伴随插入(每每次作为一个叶子次作为一个叶子),出现失衡出现失衡,需要进行调整需要进行调整。例例:四种情况下的调整方法四种情况下的调整方法设设a为指向因插入结点而为指向因插入结点而失去平衡的最小子树的根结点失去平衡的最小子树的根结点。单向右旋平衡处理单向右旋平衡处理(LLLL型型)原因原因:在:在*a a的左子树根结点的左子树插入结点的左子树根结点的左子树插入结点,即即左子树的左子树左子树的左子树LLLL型型一般的情况一般的情况单向左旋平衡处理单向左旋平衡处理(RRRR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10.1 数据结构 查找
限制150内