数据结构-第7章-查找.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构-第7章-查找.pptx》由会员分享,可在线阅读,更多相关《数据结构-第7章-查找.pptx(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构 新世纪应用型高等教育新世纪应用型高等教育计算机类课程规划教材计算机类课程规划教材新世纪应用型高等教育教材编审委员会新世纪应用型高等教育教材编审委员会 组编组编 主编主编 曹春萍曹春萍7.1 查找的基本概念第第7 7章章查找查找查找又称为检索,其功能是从大量的数据元素中找出某个特定的满足给定条件的记录或数查找又称为检索,其功能是从大量的数据元素中找出某个特定的满足给定条件的记录或数据元素。若找到满足给定条件的记录或数据元素,则称查找是成功的,此时查找的结果为给出据元素。若找到满足给定条件的记录或数据元素,则称查找是成功的,此时查找的结果为给出整个记录的信息,或指示该记录在查找表中位置的
2、指针;相反,若未找到满足给定条件的记录整个记录的信息,或指示该记录在查找表中位置的指针;相反,若未找到满足给定条件的记录或数据元素,则称查找不成功,此时,查找的结果可给出一个或数据元素,则称查找不成功,此时,查找的结果可给出一个“空空”记录或记录或“空空”指针。指针。查找的目的一般有如下四查找的目的一般有如下四种:种:(1)查找某指定的数据元素在查找表中是否存在)查找某指定的数据元素在查找表中是否存在;(2)检索某个特定的数据元素的各种属性)检索某个特定的数据元素的各种属性;(3)在查找表的合理位置上插入一个数据元素)在查找表的合理位置上插入一个数据元素;(4)从查找表中删除某个数据元素。)从
3、查找表中删除某个数据元素。7.1 查找的基本概念第第7 7章章查找查找关键字关键字关键字关键字 标识数据元素(或记录)中某个数据项的值,用它可以标识一个数据元素(或记标识数据元素(或记录)中某个数据项的值,用它可以标识一个数据元素(或记录)。若此关键字可以唯一标识一个记录,则称此关键字为主关键字(不同的记录,其主关键录)。若此关键字可以唯一标识一个记录,则称此关键字为主关键字(不同的记录,其主关键字均不同)。反之,把用以识别若干个记录的关键字称为次关键字。当数据元素只有一个数据字均不同)。反之,把用以识别若干个记录的关键字称为次关键字。当数据元素只有一个数据项时,其关键字即为该数据元素的值。项
4、时,其关键字即为该数据元素的值。利用关键字的概念,查找运算的功能可确切地表述如下:根据给定的某个关键字值利用关键字的概念,查找运算的功能可确切地表述如下:根据给定的某个关键字值key,在某种数据结构中寻找一个其键值等于在某种数据结构中寻找一个其键值等于key的数据元素。若找到一个这样的数据元素,则称查的数据元素。若找到一个这样的数据元素,则称查找成功;否则,称查找不成功。找成功;否则,称查找不成功。7.1 查找的基本概念第第7 7章章查找查找静态查找(静态查找(静态查找(静态查找(static searchstatic search)若对查找表只做前两种操作(即,肯定不会改变原查找表的若对查找
5、表只做前两种操作(即,肯定不会改变原查找表的内容),则称此查找为静态查找。内容),则称此查找为静态查找。动态查找(动态查找(动态查找(动态查找(dynamic searchdynamic search)若在查找过程中同时插入查找表中不存在的数据元素,或若在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素,则称此查找为动态查找。者从查找表中删除已存在的某个数据元素,则称此查找为动态查找。平均查找长度(平均查找长度(平均查找长度(平均查找长度(average search length,ASLaverage search length,ASL)为确定所查找的数据元
6、素在查找表中的为确定所查找的数据元素在查找表中的位置而需和给定关键字进行比较的次数的平均值。位置而需和给定关键字进行比较的次数的平均值。ASL是衡量一个查找算法性能好坏的依据是衡量一个查找算法性能好坏的依据,因因为查找的过程实际上是为查找的过程实际上是“将查找表中各数据元素的关键字与给定的关键字进行比较的过程将查找表中各数据元素的关键字与给定的关键字进行比较的过程”,所以比较次数越少,则查找所需的时间就越短,效率就越高。所以比较次数越少,则查找所需的时间就越短,效率就越高。7.2 静态查找表第第7 7章章查找查找7.2.1 7.2.1 顺序查找顺序查找顺序查找是一种最简单也是效率比较低下的查顺
7、序查找是一种最简单也是效率比较低下的查找算法。查找的基本思想是将每个结点的关键字与给找算法。查找的基本思想是将每个结点的关键字与给定的待查的关键字值定的待查的关键字值key依次进行比较,若当前扫描依次进行比较,若当前扫描到的结点关键字值与到的结点关键字值与key相等,则查找成功,返回该相等,则查找成功,返回该数据元素的存储位置;反之,若扫描结束后,仍未找数据元素的存储位置;反之,若扫描结束后,仍未找到关键字等于到关键字等于key的结点,则查找失败,返回查找失的结点,则查找失败,返回查找失败标志。顺序查找法既可以采用顺序存储结构,也可败标志。顺序查找法既可以采用顺序存储结构,也可以采用链式存储结
8、构。以采用链式存储结构。/静态查找表的顺序存储表示#define maxsize 100 /*定义最大存储容量*/typedef struct datatype datamaxsize;int length;seqtable;/*静态查找表的链式存储表示*/typedef struct node datatype data;struct node *next;linktable;7.2 静态查找表第第7 7章章查找查找7.2.2 7.2.2 折半查找折半查找折半折半查找也称为查找也称为“二分查找二分查找”,其查找效率较高,但要求待查找的数据元素采用顺序存其查找效率较高,但要求待查找的数据元素采
9、用顺序存储结构,而且查找表按关键字有序储结构,而且查找表按关键字有序(已经按关键字排好序已经按关键字排好序)。采用折半查找算法在有序表(假设为升序)中查找结点时,首先找到表的中间结点,将采用折半查找算法在有序表(假设为升序)中查找结点时,首先找到表的中间结点,将其关键字值与给定的要找的值其关键字值与给定的要找的值key进行比较,若相等,则查找成功;若当前结点的关键字值进行比较,若相等,则查找成功;若当前结点的关键字值大于要找的值大于要找的值key,则继续在表的前半部分进行折半查找,否则继续在表的后半部分进行折,则继续在表的前半部分进行折半查找,否则继续在表的后半部分进行折半查找。半查找。7.2
10、 静态查找表第第7 7章章查找查找7.2.3 7.2.3 分块查找分块查找分块查找是一种性能介于顺序查找和二分查找之间的查找方法,但它要求先对查找表建分块查找是一种性能介于顺序查找和二分查找之间的查找方法,但它要求先对查找表建立一个索引表,再进行分块查找。立一个索引表,再进行分块查找。索引表建立方法是先对查找表进行分块,要求索引表建立方法是先对查找表进行分块,要求“分块有序分块有序”,所谓,所谓“分块有序分块有序”是指块是指块内关键字不一定有序,但块间有序,即后一块子表中所有数据元素的关键字值均大于前一块内关键字不一定有序,但块间有序,即后一块子表中所有数据元素的关键字值均大于前一块中最大的关
11、键字值。然后,抽取各块中的最大关键字及其起始位置构成一个索引表,如图中最大的关键字值。然后,抽取各块中的最大关键字及其起始位置构成一个索引表,如图7-3所示。所示。分块查找方法为分两步进行,先查找索引表,因其有序,故可采用二分查找,以确定待分块查找方法为分两步进行,先查找索引表,因其有序,故可采用二分查找,以确定待查记录在哪一块,然后,在已确定的块中再进行顺序查找。查记录在哪一块,然后,在已确定的块中再进行顺序查找。7.3 动态查找表第第7 7章章查找查找7.3.1 7.3.1 二叉排序树二叉排序树1 1二叉排序树定义二叉排序树定义二叉排序树定义二叉排序树定义二叉排序树(二叉排序树(Binar
12、y Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:)或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于根结点的值;若右子树不空,则右子若左子树不空,则左子树上所有结点的值均小于根结点的值;若右子树不空,则右子树上所有结点的值均大于根结点的值。树上所有结点的值均大于根结点的值。(2)左右子树也都是二叉排序树。左右子树也都是二叉排序树。从二叉排序树的定义可得出二叉排序树的一个重要性质:按中序遍历该树所得到的中序从二叉排序树的定义可得出二叉排序树的一个重要性质:按中序遍历该树所得到的中序序列是一个递增有序序列。序列是一个递增有序序列。7.3
13、 动态查找表第第7 7章章查找查找2 2二叉排序树的查找过程二叉排序树的查找过程二叉排序树的查找过程二叉排序树的查找过程在在二叉排序树中查找关键字值为二叉排序树中查找关键字值为key的数据元素的基本思想是用给定值的数据元素的基本思想是用给定值key与根结点的关与根结点的关键字值比较,如果键字值比较,如果key小于根结点的值,则要找的结点只可能在左子树中,所以继续在左子小于根结点的值,则要找的结点只可能在左子树中,所以继续在左子树中查找,否则将继续在右子树中查找,依此方法,查找下去,直至查找成功或查找失败为树中查找,否则将继续在右子树中查找,依此方法,查找下去,直至查找成功或查找失败为止。二叉排
14、序树的查找过程描述如下:止。二叉排序树的查找过程描述如下:(1)若二叉排序树为空树,则查找失败;)若二叉排序树为空树,则查找失败;(2)若二叉排序树非空,将给定值)若二叉排序树非空,将给定值key与根结点关键字值比较,若相等,查找成功,结与根结点关键字值比较,若相等,查找成功,结束查找过程;束查找过程;(3)否则,当结定值)否则,当结定值key小于根结点关键字值时,则继续在根结点的左子树中查找;小于根结点关键字值时,则继续在根结点的左子树中查找;(4)否则,当给定值)否则,当给定值key大于根结点关键字值时,则继续在根结点的右子树中查找。大于根结点关键字值时,则继续在根结点的右子树中查找。7.
15、3 动态查找表第第7 7章章查找查找3 3二叉排序树的插入二叉排序树的插入二叉排序树的插入二叉排序树的插入二叉排序树是一种动态树表,树的结构通常不是一成不变的,在一棵二叉排序树中插入二叉排序树是一种动态树表,树的结构通常不是一成不变的,在一棵二叉排序树中插入一个结点时,首先要在二叉排序树中进行查找,若查找成功,则不用插入;查找不成功时,一个结点时,首先要在二叉排序树中进行查找,若查找成功,则不用插入;查找不成功时,则插入,新插入结点一定是二叉排序树的叶了结点。插入可以用一个递归过程实现,即:若则插入,新插入结点一定是二叉排序树的叶了结点。插入可以用一个递归过程实现,即:若二叉排序树为空,则新结
16、点作为二叉排序树的根结点;否则,若给定结点的关键字值小于根二叉排序树为空,则新结点作为二叉排序树的根结点;否则,若给定结点的关键字值小于根结点关键字值,则插入在左子树上;若给定结点的关键字值大于根结点的值,则插入在右子结点关键字值,则插入在左子树上;若给定结点的关键字值大于根结点的值,则插入在右子树上树上。4.4.二叉排序树的建立二叉排序树的建立二叉排序树的建立二叉排序树的建立利用二叉排序树的插入算法,可以很容易地实现创建二叉排序树的操作,其基本思想是:利用二叉排序树的插入算法,可以很容易地实现创建二叉排序树的操作,其基本思想是:由一棵空二叉树开始,经过一系列的查找插入操作生成一棵二叉排序树由
17、一棵空二叉树开始,经过一系列的查找插入操作生成一棵二叉排序树。7.3 动态查找表第第7 7章章查找查找5 5二叉排序二叉排序二叉排序二叉排序树删除操作树删除操作树删除操作树删除操作从二叉排序树中删除一个结之后,使得其仍能保持二叉排序树的特性不变,即删除一个从二叉排序树中删除一个结之后,使得其仍能保持二叉排序树的特性不变,即删除一个结点后还是一棵二叉排序树。结点后还是一棵二叉排序树。下面分下面分3种情况讨论一下,如何确保从二叉排序树中删除一个结点后,不会影响二叉排种情况讨论一下,如何确保从二叉排序树中删除一个结点后,不会影响二叉排序树的性质。设待删结点为序树的性质。设待删结点为*p(p为指向待删
18、结点的指针为指向待删结点的指针),其双亲结点为,其双亲结点为*f,且不失一般性,且不失一般性,可设可设*p是是*f的左孩子结点(右孩子结点的情况类似)。的左孩子结点(右孩子结点的情况类似)。7.3 动态查找表第第7 7章章查找查找(1)若若*p结点为叶结点,由于删去叶子结点后不影响整棵树的特性,所以,只需将被删结结点为叶结点,由于删去叶子结点后不影响整棵树的特性,所以,只需将被删结点的双亲结点相应指针域改为空指针。如图点的双亲结点相应指针域改为空指针。如图7-6所示。所示。7.3 动态查找表第第7 7章章查找查找(2)若若*p结点只有右子树结点只有右子树PR或只有左子树或只有左子树PL,此时,
19、只要令,此时,只要令PL或或PR直接成为其双亲结直接成为其双亲结点点*f的左子树即可,显然,作此修改也不破坏二叉排序树的特性。如图的左子树即可,显然,作此修改也不破坏二叉排序树的特性。如图7-7所示。所示。7.3 动态查找表第第7 7章章查找查找(3)*p结点既有左子树结点既有左子树PL,又有右子树,又有右子树PR,可按中序遍历保持有序进行调整。如图,可按中序遍历保持有序进行调整。如图7-8所所示,删除示,删除*p结点前,中序遍历序列为:结点前,中序遍历序列为:CL,C,QL,Q,SL,S,*P,PR,*f,;则删除结;则删除结点点*P后,为保持其它元素之间的相对位置不变,则中序序列为:后,为
20、保持其它元素之间的相对位置不变,则中序序列为:CL,C,QL,Q,SL,S,PR,*f,。以有两种实现方法:其一是令以有两种实现方法:其一是令*P的直接前驱(或直接后继)替代的直接前驱(或直接后继)替代*P,然后再从二叉排序,然后再从二叉排序树中删去它的直接前驱(或直接后继),如图树中删去它的直接前驱(或直接后继),如图7-8(a)所示。其二是令所示。其二是令*P的左子树为的左子树为*f的左子的左子树,而树,而*P的右子树为的右子树为S的右子树,如图的右子树,如图7-8(b)所示。所示。7.3 动态查找表第第7 7章章查找查找7.3 动态查找表第第7 7章章查找查找6 6二叉排序树查找性能分析
21、二叉排序树查找性能分析二叉排序树查找性能分析二叉排序树查找性能分析在二叉排序树上查找其关键字等于给定值的结点的过程,恰是走了一条从根结点到该结在二叉排序树上查找其关键字等于给定值的结点的过程,恰是走了一条从根结点到该结点的路径的过程,和给定值比较的关键字个数等于路径长度加点的路径的过程,和给定值比较的关键字个数等于路径长度加1(或结点所在层次数或结点所在层次数),因此和,因此和折半查找类似,与给定值比较的关键字个数不折半查找类似,与给定值比较的关键字个数不超超过过树的深度。但含有树的深度。但含有n个结点的判定树是唯一的个结点的判定树是唯一的,而而含有含有n个结点的二叉排序树却不唯一。例如,个结
22、点的二叉排序树却不唯一。例如,图图7-9(a)和图)和图7-9(b)所示的是结点数为)所示的是结点数为6的两的两棵棵二二叉排序树,图叉排序树,图7-9(a)中树的深度为)中树的深度为3,而,而图图7-9(b)中树的深度为)中树的深度为6。7.3 动态查找表第第7 7章章查找查找7.3.2 7.3.2 平衡二叉树平衡二叉树1 1平衡二叉树定义平衡二叉树定义平衡二叉树定义平衡二叉树定义平衡二叉树又称平衡二叉树又称AVL树,它或者是树,它或者是棵空树,或者是具有下列性质的二叉排序树:它的棵空树,或者是具有下列性质的二叉排序树:它的左子树和右子树都是平衡二叉树,且左子树和右子树高度差的绝对值不超过左子
23、树和右子树都是平衡二叉树,且左子树和右子树高度差的绝对值不超过1。图图7-10给出了两棵二叉排序树,每个结点旁边所注数字是以该结点为根的二叉树中左子给出了两棵二叉排序树,每个结点旁边所注数字是以该结点为根的二叉树中左子树与右子树高度之差,称这个数字为结点的平衡因子。由平衡二叉树的定义可知,所有结点树与右子树高度之差,称这个数字为结点的平衡因子。由平衡二叉树的定义可知,所有结点的平衡因子只能取的平衡因子只能取-1,0,1三个值之一。若二叉排序树中存在这样的结点,其平衡因子的绝三个值之一。若二叉排序树中存在这样的结点,其平衡因子的绝对值大于对值大于l,这棵树就不是平衡二叉树。如图,这棵树就不是平衡
24、二叉树。如图7-10(a)所示的二叉排序树不是平衡二叉树。)所示的二叉排序树不是平衡二叉树。7.3 动态查找表第第7 7章章查找查找1 1平衡二叉树定义平衡二叉树定义平衡二叉树定义平衡二叉树定义7.3 动态查找表第第7 7章章查找查找2 2二叉排序树的平衡化二叉排序树的平衡化二叉排序树的平衡化二叉排序树的平衡化在平衡二叉树上插入或删除结点后,可能使二叉树失去平衡,因此,需要对失去平衡的在平衡二叉树上插入或删除结点后,可能使二叉树失去平衡,因此,需要对失去平衡的二叉树进行平衡化调整。设二叉树进行平衡化调整。设A结点为失去平衡的最小子树根结点,对该子树进行平衡化调整结点为失去平衡的最小子树根结点,
25、对该子树进行平衡化调整归纳起来有以下四种情况。归纳起来有以下四种情况。(1 1)左单旋转()左单旋转()左单旋转()左单旋转(RRRR型)型)型)型)这种失衡是因为在失衡结点的右孩子的右子树上插入结点造成的。如图这种失衡是因为在失衡结点的右孩子的右子树上插入结点造成的。如图7-11(a)为插入)为插入前的子树。其中前的子树。其中A的左子树为的左子树为AL,A的右孩子结点为的右孩子结点为B,BL、BR分别为结点分别为结点B的左右子树,的左右子树,AL、BL、BR三棵子树的高度均为三棵子树的高度均为h。则图。则图7-10(a)所示的二叉树是平衡二叉树。)所示的二叉树是平衡二叉树。7.3 动态查找表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 查找
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内