数据结构查表找实用教案实用教案_第1页
数据结构查表找实用教案实用教案_第2页
数据结构查表找实用教案实用教案_第3页
数据结构查表找实用教案实用教案_第4页
数据结构查表找实用教案实用教案_第5页
已阅读5页,还剩145页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1何谓(hwi)查找表 ? 查找表是由同一类型的数据查找表是由同一类型的数据(shj)元素元素(或记录或记录)构成的集合。构成的集合。 由于由于“集合集合”中的数据元素之中的数据元素之间存在着松散的关系,因此间存在着松散的关系,因此(ync)查找表是一种应用灵便的结构。查找表是一种应用灵便的结构。第1页/共150页第一页,共150页。2对查找表经常进行对查找表经常进行(jnxng)(jnxng)的操作的操作: :1. 查询某个查询某个“特定的特定的”数据元素是否数据元素是否在查找表中;在查找表中;2. 检索某个检索某个“特定的特定的”数据元素的各数据元素的各种属性种属性(shxng);3. 在

2、查找表中插入一个数据元素;在查找表中插入一个数据元素;4. 从查找表中删去某个数据元素。从查找表中删去某个数据元素。第2页/共150页第二页,共150页。3仅作仅作 前两种即查询和检索操作的查找表。前两种即查询和检索操作的查找表。即检索的前后不会即检索的前后不会(b hu)改变查找表的内容。改变查找表的内容。在查找过程中同时插入查找表中不存在的数据在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素,或者从查找表中删除已存在的某个数据元素元素,此类表为动态查找表。即检索过程中可能此类表为动态查找表。即检索过程中可能会改变数据元素的存储会改变数据元素的存储(cn

3、ch)位置。位置。查找表可分为两类查找表可分为两类:第3页/共150页第三页,共150页。4第4页/共150页第四页,共150页。5是数据元素(或记录)中某个数据项的是数据元素(或记录)中某个数据项的值,用以标识(识别值,用以标识(识别(shbi))一个数)一个数据元素(或记录)。据元素(或记录)。 若此关键字可以识别唯一若此关键字可以识别唯一(wi y)的的一个记录,则称之谓一个记录,则称之谓“主关键字主关键字”。 若此关键字能识别若干若此关键字能识别若干(rugn)记录,则称记录,则称之谓之谓“次关键字次关键字”。第5页/共150页第五页,共150页。6 根据给定的某个根据给定的某个(mu

4、 )值,在查找表中确值,在查找表中确定一个其关键字等于给定值的数据元素或定一个其关键字等于给定值的数据元素或(记录)(记录) 查找查找(ch zho) 若查找表中存在这样一个记录,则称若查找表中存在这样一个记录,则称“查查找成功找成功(chnggng)”,查找结果:给出整,查找结果:给出整个记录的信息,或指示该记录在查找表中的个记录的信息,或指示该记录在查找表中的位置;位置; 否则称否则称“查找不成功查找不成功(chnggng)”,查,查找结果:给出找结果:给出“空记录空记录”或或“空指针空指针”。第6页/共150页第六页,共150页。7如果查找表中的数据元素如果查找表中的数据元素(yun s

5、)之间之间不存在明显的组织规律,则不便于查找。不存在明显的组织规律,则不便于查找。 例:查阅英文单词时,由于字典是按例:查阅英文单词时,由于字典是按单词的字母在字母表中的次序编排的,单词的字母在字母表中的次序编排的,因此查找时不需要从字典中第一个单词因此查找时不需要从字典中第一个单词比较起,而只要根据待查单词的每个字比较起,而只要根据待查单词的每个字母在字母表中的位置查到该单词。母在字母表中的位置查到该单词。如何进行如何进行(jnxng)查找?查找?查找的方法取决于查找表的结构。即取决查找的方法取决于查找表的结构。即取决于数据元素于数据元素(yun s)依何种关系组织在依何种关系组织在一起。一

6、起。第7页/共150页第七页,共150页。8第8页/共150页第八页,共150页。99.1 静静 态态 查查 找找 表表第9页/共150页第九页,共150页。10数据数据(shj)对象对象D:数据数据(shj)关系关系R:D是具有相同特性的数是具有相同特性的数据元素的集合。每个数据元素的集合。每个数据元素含有类型据元素含有类型(lixng)相同的相同的关键字,可唯一标识数关键字,可唯一标识数据元素。据元素。 数据元素同属一个集合。数据元素同属一个集合。ADT StaticSearchTable /P216第10页/共150页第十页,共150页。11 Create(&ST, n);Destroy

7、(&ST);Search(ST, key);Traverse(ST, Visit();基本操作基本操作 P:next ADT StaticSearchTable第11页/共150页第十一页,共150页。12构造一个含构造一个含n个数据元素个数据元素(yun s)的静态查找表的静态查找表ST。 Create(&ST, n);操作操作(cozu)结果:结果:第12页/共150页第十二页,共150页。13销毁销毁(xiohu)表表ST。Destroy(&ST);初始条件:初始条件:操作操作(cozu)结果:结果:静态查找静态查找(ch zho)表表ST存在;存在;第13页/共150页第十三页,共15

8、0页。14若若 ST 中存在其关键字等于中存在其关键字等于 key 的数据的数据(shj)元素,则元素,则函数值为该元素的值或在表中函数值为该元素的值或在表中的位置,否则为的位置,否则为“空空”。 Search(ST, key);初始条件:初始条件:操作操作(cozu)结果:结果:静态静态(jngti)查找表查找表ST存在,存在,key 为和查找表中元素的关为和查找表中元素的关键字类型相同的给定值;键字类型相同的给定值;第14页/共150页第十四页,共150页。15按某种次序对按某种次序对ST的每个元的每个元素素(yun s)调用函数调用函数Visit()一次且仅一次,一一次且仅一次,一旦旦V

9、isit()失败,则操作失失败,则操作失败。败。Traverse(ST, Visit();初始条件:初始条件:操作操作(cozu)结果:结果:静态查找表静态查找表ST存在,存在,Visit是对元素操作是对元素操作(cozu)的应用函数;的应用函数;第15页/共150页第十五页,共150页。16typedef struct / 数据数据(shj)元素存储空间基址,建表时元素存储空间基址,建表时 / 按实际长度分配,按实际长度分配,0号单元留空号单元留空 int length; / 表的长度表的长度 SSTable;假设静态假设静态(jngti)查找表的顺序存查找表的顺序存储结构为储结构为Elem

10、Type *elem;第16页/共150页第十六页,共150页。17数据元素数据元素(yun s)类型的定义为类型的定义为:typedef struct keyType key; / 关键字域 / 其它(qt)属性域 ElemType ; , TElemType ;第17页/共150页第十七页,共150页。18一、顺序一、顺序(shnx)查找表查找表二、有序查找二、有序查找(ch zho)表表三、索引三、索引(suyn)顺序表顺序表第18页/共150页第十八页,共150页。19 以顺序表或线性链表表示静以顺序表或线性链表表示静态查找表。态查找表。从表的一端开始,顺序(逐个)从表的一端开始,顺序

11、(逐个)扫描线性表,依次将扫描到的扫描线性表,依次将扫描到的结点关键字和给定值结点关键字和给定值Key相比相比较,若当前扫描到的结点关键较,若当前扫描到的结点关键字与字与Key相等相等(xingdng),则检索成功;若扫描结束后,则检索成功;若扫描结束后,仍未找到关键字等于仍未找到关键字等于Key的结的结点,则检索失败。点,则检索失败。 一、顺序一、顺序(shnx)查找表查找表第19页/共150页第十九页,共150页。20i0 1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92找找6464监视哨iiii比较(bjio)次数=5比较次数

12、:查找(ch zho)第n个元素: 1查找(ch zho)第n-1个元素:2.查找(ch zho)第1个元素: n查找(ch zho)第i个元素: n+1-i查找(ch zho)失败: n+1查找过程:从表的一端开始逐个查找过程:从表的一端开始逐个(zhg)进行记录的关键字和给定值的比较。进行记录的关键字和给定值的比较。例如:例如:第20页/共150页第二十页,共150页。2121 37 88 19 92 05 64 56 80 75 13 0 1 2 3 4 5 6 7 8 9 10 11 ST.LengthST.elemi21 37 88 19 92 05 64 56 80 75 13 0

13、 1 2 3 4 5 6 7 8 9 10 11 ST.LengthST.elemi60ikey=64key=60i64第21页/共150页第二十一页,共150页。22int Search_Seq(SSTable ST, KeyType key) / 在顺序在顺序(shnx)表表ST中顺序中顺序(shnx)查找其关键字等于查找其关键字等于 / key的数据元素。若找到,则函数值为的数据元素。若找到,则函数值为 / 该元素在表中的位置,否则为该元素在表中的位置,否则为0。 ST.elem0.key = key; / “哨兵哨兵” for (i=ST.length; ST.elemi.key!=k

14、ey; -i); / 从后往前找从后往前找 return i; / 找不到时,找不到时,i为为0 / Search_Seq第22页/共150页第二十二页,共150页。23 定义:定义: 查找算法的平均查找长度查找算法的平均查找长度 (Average Search Length) 也就是为确定某一结点在数据集合中的位置,给定也就是为确定某一结点在数据集合中的位置,给定(i dn)值值与集合中的结点关键字所需进行的比较次数。与集合中的结点关键字所需进行的比较次数。其中其中: n 为表长,为表长,Pi 为查找表中第为查找表中第i个记录的概率,个记录的概率, 且且 Ci为找到该记录时,曾和给定为找到该

15、记录时,曾和给定(i dn)值值 比较过的关键字的个数比较过的关键字的个数分析顺序查找分析顺序查找(ch zho)的时间性能。的时间性能。niiiCPASL111niiP第23页/共150页第二十三页,共150页。24在等概率查找的情况在等概率查找的情况(qngkung)下,下, 顺序表查找的平均查找长度为:顺序表查找的平均查找长度为:对顺序对顺序(shnx)表而言,表而言,Ci = n-i+1nPi121111n)i(nnASLnissASL = nP1 +(n-1)P2 + +2Pn-1+Pn第24页/共150页第二十四页,共150页。25 若查找概率无法若查找概率无法(wf)事先测定,事

16、先测定,则查找过程采取的改进办法是,可以则查找过程采取的改进办法是,可以在记录中附设一个访问频度域,使查在记录中附设一个访问频度域,使查找概率大的记录在查找过程中不断后找概率大的记录在查找过程中不断后移,以便在以后的查找过程中减少比移,以便在以后的查找过程中减少比较次数较次数在不等概率在不等概率(gil)查找的情况下,查找的情况下,ASLss 在在 PnPn-1P2P1时取极小值时取极小值ASL = nP1 +(n-1)P2 + +2Pn-1+Pn第25页/共150页第二十五页,共150页。26 上述顺序上述顺序(shnx)查找表的查找算法简单,查找表的查找算法简单, 但平均查找长度较大,特别

17、不适用于表长较大的查找表。但平均查找长度较大,特别不适用于表长较大的查找表。二、有序查找二、有序查找(ch zho)表表 若以有序表表示静态若以有序表表示静态(jngti)查找表,则查找过程可以基于查找表,则查找过程可以基于“折半折半”进行。进行。第26页/共150页第二十六页,共150页。271.设表长为设表长为n,low、high和和mid分别指向待分别指向待查元素所在区间的上界、下界和中点查元素所在区间的上界、下界和中点,k为给为给定值。定值。2.初始时,令初始时,令low=1,high=n,mid=(low+high)/2让让k与与mid指向的记录比较指向的记录比较若若k=rmid.k

18、ey,查找成功,查找成功(chnggng)若若krmid.key,则,则low=mid+13.重复上述操作,直至重复上述操作,直至lowhigh时,查找失时,查找失败。败。折半折半(zhbn)查找算查找算法实现法实现第27页/共150页第二十七页,共150页。2805 13 19 21 37 56 64 75 80 88 92 0 1 2 3 4 5 6 7 8 9 10 11 ST.elemST.length例如例如: key=64 的查找的查找(ch zho)过程如下过程如下lowhighmidlow mid high midlow 指示查找指示查找(ch zho)区间的下界区间的下界;h

19、igh 指示查找指示查找(ch zho)区间的上界区间的上界;mid = (low+high)/2。第28页/共150页第二十八页,共150页。29int Search_Bin ( SSTable ST, KeyType key ) low = 1; high = ST.length; / 置区间初值置区间初值 while (low 50时,可得近似时,可得近似(jn s)结果结果 一般情况下,表长为一般情况下,表长为 n 的折半查的折半查找的判定树的深度和含有找的判定树的深度和含有 n 个结个结点点(ji din)的完全二叉树的深度的完全二叉树的深度相同。因此具有相同。因此具有n个结点个结点

20、(ji din)的判定树的深度为的判定树的深度为 +1。为了方便起见,以满二叉树为例,为了方便起见,以满二叉树为例,树中层次为树中层次为1的结点的结点(ji din)有有1个,层次为个,层次为2的结点的结点(ji din)有有2个,层次为个,层次为h的结点的结点(ji din)有有2h1个个.n2log1) 1(log2nASLbs1) 1(log1) 1(log12111),1(log, 122211112nnnnjncncpASLnphnhnhjjniiniiiih则:概率相等设表中每个记录的查找的满二叉树即判定树是深度为设表长第31页/共150页第三十一页,共150页。32在在 n50

21、时,可得近似时,可得近似(jn s)结果结果 1) 1(log2nASLbs可见,可见,折半折半(zhbn)查找的效率比顺序查找高。查找的效率比顺序查找高。折半折半(zhbn)查找只能适用于有序表,并且以查找只能适用于有序表,并且以顺序存储结构存储。顺序存储结构存储。第32页/共150页第三十二页,共150页。33顺序表顺序表有序表有序表表的特性表的特性无序无序有序有序存储结构存储结构顺序顺序 或或 链式链式顺序顺序插删操作插删操作易于进行易于进行需移动元素需移动元素ASL的值的值大大小小顺序顺序(shnx)表和有序表和有序表的比较表的比较第33页/共150页第三十三页,共150页。34三、索

22、引三、索引(suyn)顺序表顺序表以索引顺序以索引顺序(shnx)(shnx)表表示静态查表表示静态查找表,找表,searchsearch操作可用分块查找来实操作可用分块查找来实现。现。分块查找又称索引顺序分块查找又称索引顺序(shnx)(shnx)查查找,这是顺序找,这是顺序(shnx)(shnx)查找的一种查找的一种改进方法。在此查找方法中,除表本改进方法。在此查找方法中,除表本身以外,尚需建立一个身以外,尚需建立一个“索引表索引表”。第34页/共150页第三十四页,共150页。35例如(lr(lr) 表中含有1818个元素(yun s)(yun s),可分成三个子表。对每个子表(或称块)

23、建立一个索引项,其中包括两项内容:关键字项(其值为该子表内的最大关键字)和项指针(指示该子表的第一个元素(yun s)(yun s)在表中位置)。 索 引 表 最大关键字起始(q sh)地址 22 48 8617 13221213 8 9 20334244382448605874498653第35页/共150页第三十五页,共150页。36 索引表按关键字有序,故表或者有序,或者分块有序。所谓(suwi)(suwi)“分块有序” 是指一个子表中所有元素的关键字均大于前一个子表的最大关键字。 第36页/共150页第三十六页,共150页。37索引顺序索引顺序(shnx)表的查找过程:表的查找过程:1

24、)由索引确定)由索引确定(qudng)记录所在区间;记录所在区间;2)在顺序)在顺序(shnx)表的某个区间内进行查找。表的某个区间内进行查找。注意:索引可以根据查找表的特点来构造。注意:索引可以根据查找表的特点来构造。可见,可见, 索引顺序查找索引顺序查找的过程也是一个的过程也是一个“缩小区间缩小区间”的查找过程。的查找过程。第37页/共150页第三十七页,共150页。381 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1822 12 13 8 9 20 33 42 44 38 24 48 60 58 74 57 86 5322 48 861 7 13索引

25、(suyn)表查38例如例如(lr)第38页/共150页第三十八页,共150页。39索引顺序索引顺序(shnx)查找的平均查找长度查找的平均查找长度 = 查找查找“索引索引”的平均查找长度的平均查找长度 + 查找查找“顺序顺序(shnx)表表”的平均查的平均查找长度找长度第39页/共150页第三十九页,共150页。40分块查找方法分块查找方法(fngf)评价评价121)(21212111)1( 211ssnssnsbisjbASLsbnLLLLASLsibjbswbwbbs:用顺序查找确定所在块率相等,则:表中每个记录的查找概个记录,并设块,每块含的表平均分成若将表长为查找长度在块中查找元素的

26、平均的平均查找长度查找索引表确定所在块其中:ns n第40页/共150页第四十页,共150页。41查找方法查找方法(fngf)比较比较ASL最大最大最小最小两者之间两者之间表结构表结构有序表、无序表有序表、无序表有序表有序表分块有序表分块有序表存储结构存储结构顺序存储结构顺序存储结构或线性链表或线性链表顺序存储结构顺序存储结构顺序存储结构顺序存储结构或线性链表或线性链表顺序顺序(shnx)查找查找折半折半(zhbn)查找查找 分块查找分块查找第41页/共150页第四十一页,共150页。429.2 动动 态态 查查 找找 表表第42页/共150页第四十二页,共150页。43动态查找表的特点动态查

27、找表的特点:表结构本身是在查找过程中动态生成。表结构本身是在查找过程中动态生成。若表中存在其关键字等于给定值若表中存在其关键字等于给定值key的记录的记录,表明查找成功表明查找成功(chnggng);否则插入关键字等于;否则插入关键字等于key的记录。的记录。第43页/共150页第四十三页,共150页。44ADT DynamicSearchTable 抽象数据类型动态抽象数据类型动态(dngti)查找表的定义如下:查找表的定义如下:数据对象数据对象(duxing)D:数据关系数据关系R: 数据元素同属数据元素同属(tn sh)一个集合。一个集合。D是具有相同特性的数据是具有相同特性的数据元素的

28、集合。元素的集合。每个数据元素含有类型相同每个数据元素含有类型相同的关键字,的关键字, 可唯一标识数可唯一标识数据元素。据元素。第44页/共150页第四十四页,共150页。45InitDSTable(&DT)/构造一个空的动态查找构造一个空的动态查找表表DT。DestroyDSTable(&DT)/销毁动态查找表销毁动态查找表DT。SearchDSTable(DT, key);/查找查找 DT 中与中与关键字关键字key等值的元素。等值的元素。InsertDSTable(&DT, e);/若若 DT 中不存在中不存在其关键字等于其关键字等于 e.key 的的 数据元素,则插入数据元素,则插入

29、e 到到 DT。DeleteDSTable(&T, key);/删除删除DT中关键中关键字等于字等于key的数据元素。的数据元素。TraverseDSTable(DT, Visit();/按某种次按某种次序序(cx)对对DT的每个结点调用函数的每个结点调用函数 Visit() 一次且至多一次。一次且至多一次。基本操作:基本操作:nextADT DynamicSearchTable第45页/共150页第四十五页,共150页。46一、二叉排序一、二叉排序(pi x)树(二叉查找树)树(二叉查找树)二、二叉平衡二、二叉平衡(pnghng)树树三、三、B - 树树四、四、B+树树第46页/共150页第

30、四十六页,共150页。47一、二叉排序一、二叉排序(pi x)树树(二叉查找树)(二叉查找树)1定义定义(dngy)2查找查找(ch zho)算法算法3插入算法插入算法4删除算法删除算法5查找性能的分析查找性能的分析第47页/共150页第四十七页,共150页。48(1)若它的左子树不空,则左子树上)若它的左子树不空,则左子树上 所有所有(suyu)结点的值均小于根结点的值;结点的值均小于根结点的值;1定义定义(dngy): 二叉排序二叉排序(pi x)树或者是一棵空树;或者树或者是一棵空树;或者是具有如下特性的二叉树:是具有如下特性的二叉树:(3)它的左、右子树)它的左、右子树也都也都分别分别

31、是二叉是二叉 排序树排序树。(2)若它的右子树不空,则右子树上)若它的右子树不空,则右子树上 所有所有结点的值结点的值均大于均大于根结点的值;根结点的值;第48页/共150页第四十八页,共150页。49503080209010854035252388例如例如(lr):是二叉排序是二叉排序(pi x)树树66不不第49页/共150页第四十九页,共150页。50 通常,取二叉链表作为通常,取二叉链表作为二叉排序二叉排序(pi x)树的存储结构树的存储结构typedef struct BiTNode / 结点结构 struct BiTNode *lchild, *rchild; / 左右孩子(hi

32、zi)指针 BiTNode, *BiTree;TElemType data;第50页/共150页第五十页,共150页。511)若给定值等于根结点的关键字,)若给定值等于根结点的关键字,则查找成功;则查找成功;2)若给定值小于根结点的关键字,)若给定值小于根结点的关键字,则继续则继续(jx)在左子树上进行查找;在左子树上进行查找;3)若给定值大于根结点的关键字,)若给定值大于根结点的关键字,则继续则继续(jx)在右子树上进行查找。在右子树上进行查找。否则否则(fuz)若二叉排序树若二叉排序树为空为空,则查找不成功;,则查找不成功;第51页/共150页第五十一页,共150页。52503080209

33、08540358832例如例如(lr):二叉排序二叉排序(pi x)树树查找查找(ch zho)关键字关键字= 50 ,505035 ,503040355090 ,50809095 第52页/共150页第五十二页,共150页。53从上述查找从上述查找(ch zho)过程可见,过程可见,在查找过程在查找过程(guchng)中,生成了一条查找路径中,生成了一条查找路径: 从根结点出发,沿着左分支或右分支逐从根结点出发,沿着左分支或右分支逐层向下直至关键字等于层向下直至关键字等于(dngy)给定值的给定值的结点结点;或者或者 从根结点出发,沿着左分支或右分支从根结点出发,沿着左分支或右分支逐层向下直

34、至指针指向空树为止。逐层向下直至指针指向空树为止。 查找成功查找成功 查找不成功查找不成功第53页/共150页第五十三页,共150页。54BiTree SearchBST( BiTree T, KeyType key) /在根指针T所指二叉排序树中递归地查找某关键字 /等于Key的数据元素,若查找成功(chnggng),则返回指向 /该数据元素的指针,否则返回空指针 if (!T)| EQ(key, T-data.key) return (T);/查找结束 else if LT(key, T-data.key) return(SearchBST(T-lchild, key) else retu

35、rn (SearchBST(T-rchild, key); /SearchBST第54页/共150页第五十四页,共150页。55二叉排序树是一种动态树表,其特点二叉排序树是一种动态树表,其特点(tdin)是,树的结构通常不是一次生成是,树的结构通常不是一次生成的,而是在查找的过程中,当树中不存在的,而是在查找的过程中,当树中不存在关键字等于给定值的结点时进行插入。关键字等于给定值的结点时进行插入。新插入的结点一定是一个新添加的叶子结新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径上访问点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。的最后一个结点的左孩

36、子或右孩子结点。为此将二叉树的查找算法改为如下算法为此将二叉树的查找算法改为如下算法第55页/共150页第五十五页,共150页。56算法描述算法描述(mio sh)如下:如下:Status SearchBST (BiTree T, KeyType key, BiTree f, BiTree &p ) / 在根指针在根指针 T 所指二叉排序树中递归地查找所指二叉排序树中递归地查找其其 / 关键字等于关键字等于 key 的数据元素,若查找成功,的数据元素,若查找成功, / 则返回指针则返回指针 p 指向指向(zh xin)该数据元素该数据元素的结点,并返回的结点,并返回 / 函数值为函数值为 TR

37、UE; / SearchBST 否则否则(fuz)表明查找不成功,返回表明查找不成功,返回 / 指针指针 p 指向查找路径上访问的最后一个结点,指向查找路径上访问的最后一个结点, / 并返回函数值为并返回函数值为FALSE, 指针指针 f 指向当前访问指向当前访问 / 的结点的双亲,其初始调用值为的结点的双亲,其初始调用值为NULL第56页/共150页第五十六页,共150页。5730201040352523fT设设 key = 48fTfT22pfTfTTTTfffp第57页/共150页第五十七页,共150页。58if (!T)else if ( EQ(key, T-data.key) ) e

38、lse if ( LT(key, T-data.key) ) else p = f; return FALSE; / 查找查找(ch zho)不成功不成功 p = T; return TRUE; / 查找查找(ch zho)成功成功SearchBST (T-lchild, key, T, p ); / 在左子树中继续在左子树中继续(jx)查找查找SearchBST (T-rchild, key, T, p ); / 在右子树中继续查找在右子树中继续查找Status SearchBST (BiTree T, KeyType key, BiTree f, BiTree &p ) / SearchB

39、ST第58页/共150页第五十八页,共150页。59根据动态查找表的定义,“插入”操作(cozu)在查找不成功时才进行;3二叉排序二叉排序(pi x)树的树的插入算法插入算法 若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程(guchng)得到。第59页/共150页第五十九页,共150页。60303020302040302040103020401025302040102545第60页/共150页第六十页,共150页。61第61页/共150页第六十一页,共150页。62Status Insert BST(BiTree &T, ElemT

40、ype e ) if (!SearchBST ( T, e.key, NULL, p ) s = (BiTree) malloc (sizeof (BiTNode); / 为新结点为新结点 分配空间分配空间(kngjin)s-data = e; s-lchild = s-rchild = NULL; if ( !p ) T = s; / 插入插入 s 为新的根结点为新的根结点else if ( LT(e.key, p-data.key) ) p-lchild = s; / 插入插入 *s 为为 *p 的的左孩子左孩子else p-rchild = s; / 插入插入 *s 为为 *p 的右的右

41、孩子孩子return TRUE; / 插入成功插入成功 else return FALSE; / Insert BST第62页/共150页第六十二页,共150页。63(1)被删除的结点是叶子;)被删除的结点是叶子;(2)被删除的结点只有)被删除的结点只有(zhyu)左子树或者只有左子树或者只有(zhyu)右子树;右子树;(3)被删除的结点既有左子树,也有右子树。)被删除的结点既有左子树,也有右子树。可分三种情况可分三种情况(qngkung)讨论:讨论: 和插入相反,删除在和插入相反,删除在查找成功查找成功之后进行,并且之后进行,并且要求在删除二叉排序树上某个结点之后,要求在删除二叉排序树上某个

42、结点之后,仍然保仍然保持二叉排序树的特性持二叉排序树的特性。第63页/共150页第六十三页,共150页。6450308020908540358832(1)被删除的结点)被删除的结点(ji din)是叶子结点是叶子结点(ji din)例如例如(lr):被删关键字被删关键字 = 2088其双亲结点中相应指针其双亲结点中相应指针(zhzhn)域的值改为域的值改为“空空”第64页/共150页第六十四页,共150页。6550308020908540358832(2)被删的结点)被删的结点(ji din)只有左子树或只有只有左子树或只有右子树右子树 其双亲其双亲(shungqn)结点的相应指针域结点的相应

43、指针域的值改为的值改为 “指向被删除结点的左子树或右指向被删除结点的左子树或右子树子树”。被删关键字被删关键字 = 4080第65页/共150页第六十五页,共150页。6650308020908540358832(3)被删除)被删除(shnch)的结点既有左子树,也有右子树的结点既有左子树,也有右子树4040按中序遍历写出序列,按中序遍历写出序列, 以被删结点其前驱以被删结点其前驱(qinq)替代之,然后再删除该前驱替代之,然后再删除该前驱(qinq)结结点点被删结点被删结点(ji din)前驱结点前驱结点被删关键字被删关键字 = 50第66页/共150页第六十六页,共150页。67第67页/

44、共150页第六十七页,共150页。68Status DeleteBST (BiTree &T, KeyType key ) / 若二叉排序树若二叉排序树 T 中存在其关键字等于中存在其关键字等于 key 的的 / 数据元素数据元素(yun s),则删除该数据元素,则删除该数据元素(yun s)结点,并返回结点,并返回 / 函数值函数值 TRUE,否则返回函数值,否则返回函数值 FALSE if (!T) return FALSE; else / DeleteBST算法算法(sun f)描述如下:描述如下:(p230) 第68页/共150页第六十八页,共150页。69if ( EQ (key,

45、T-data.key) ) / 找到关键字等于找到关键字等于key的数据的数据(shj)元素元素else if ( LT (key, T-data.key) ) else Delete (T); return TRUE; DeleteBST ( T-lchild, key ); / 继续继续(jx)在左子树中进行查找在左子树中进行查找DeleteBST ( T-rchild, key ); / 继续继续(jx)在右子树中进行查找在右子树中进行查找第69页/共150页第六十九页,共150页。70void Delete ( BiTree &p ) / 从二叉排序从二叉排序(pi x)树中删除结树中

46、删除结点点 p, / 并重接它的左子树或右子树并重接它的左子树或右子树 if (!p-rchild) else if (!p-lchild) else / Delete其中删除操作过程如下其中删除操作过程如下(rxi)所描述:所描述: 第70页/共150页第七十页,共150页。71 / 右子树为空树则只需重接它的左子树右子树为空树则只需重接它的左子树q = p; p = p-lchild; free(q); pq第71页/共150页第七十一页,共150页。72/ 左子树为空树只需重接它的右子树左子树为空树只需重接它的右子树q = p; p = p-rchild; free(q);pq第72页/

47、共150页第七十二页,共150页。73q = p; s = p-lchild;while (s-rchild) q = s; s = s-rchild; / s 指向被删结点指向被删结点(ji din)的前驱的前驱/ 左右左右(zuyu)子树均不空子树均不空p-data = s-data;if (q != p ) q-rchild = s-lchild; else q-lchild = s-lchild; / 重接重接*q的左子树的左子树free(s);第73页/共150页第七十三页,共150页。74 对于每一棵特定的二叉排序树,均可按照平均查找对于每一棵特定的二叉排序树,均可按照平均查找(c

48、h zho)长度的定义来求它的长度的定义来求它的 ASL 值,显然,由值相同的值,显然,由值相同的 n 个关键字,构造所得的不同形态的各棵二叉排序树的平均查个关键字,构造所得的不同形态的各棵二叉排序树的平均查找找(ch zho)长长 度的值不同,甚至可能差别很大。度的值不同,甚至可能差别很大。第74页/共150页第七十四页,共150页。75由关键字序列由关键字序列(xli) 3,1,2,5,4构造而得的二叉排序树构造而得的二叉排序树由关键字序列由关键字序列(xli) 1,2,3,4,5构造而得的二叉排序树,构造而得的二叉排序树,例如例如(lr):2134535412ASL =(1+2+3+4+

49、5)/ 5 = 3ASL =(1+2+3+2+3)/ 5 = 2.2第75页/共150页第七十五页,共150页。76第76页/共150页第七十六页,共150页。77101iiicp310/ )3443221 (第77页/共150页第七十七页,共150页。78二、二叉平衡(pnghng)树何谓何谓(hwi)“二叉平衡二叉平衡树树”? 如何构造如何构造(guzo)“二叉平衡二叉平衡树树”第78页/共150页第七十八页,共150页。79是平衡二叉树,不是(b shi)完全二叉树不是(b shi)平衡二叉树第79页/共150页第七十九页,共150页。80 二叉平衡树是二叉查找树的另一种(y zhn)形

50、式,其特点为:树中每个结点的左、右子树深度之差(平衡因子BF)的绝对值不大于1 1RLhh例如例如(lr):548254821是平衡是平衡(pnghng)树树不是平衡树不是平衡树平衡二叉树平衡二叉树BF值011001220失去平衡的最小子树第80页/共150页第八十页,共150页。81v 构造二叉平衡(查找)树的方法:v在插入过程中,采用平衡旋转技术(jsh)。v例如:依次插入的关键字为5, 4, 3, 8, 19,1,2,25,2354543BF值10102(1)由于插入节点3使得树不再平衡,而3是插入在失去平衡的最小子树根节点5的左子树根节点4的左子树上。定义(dngy)失去平衡的最小子树

51、根节点为a,则该类不平衡可归纳为,在a的左子树根节点的左子树上插入导致的不平衡可使用单向右旋平衡处理,可以记为左左-右。543000第81页/共150页第八十一页,共150页。82435843584358190-10-100-1-2-24358190000-1(2)由于插入节点19使得树不再平衡,而19是插入在失去平衡的最小子树根节点5的右子树根节点8的右子树上。该类不平衡可归纳为,在a的右子树根节点的右子树上插入导致的不平衡可使用单向(dn xin)左旋平衡处理,可以记为右右-左。第82页/共150页第八十二页,共150页。83458190003211-1204581900032121104

52、58190003002010先向左旋(zu xun)再向右旋(3)在3的左子树根节点(ji din)1的右子树上插入节点(ji din)2导致不平衡,可使用双向旋转:先使其子树左旋再整棵树右旋,可记为左右-左右。第83页/共150页第八十三页,共150页。8445819-2-2030-2201025231045819-2-2030-220102325-10先向右旋458230-1030-12010251900再向左旋(zu xun)(4)在19的右子树根节点25的左子树上插入(ch r)节点23导致不平衡,可使用双向旋转:先使其子树右旋再整棵树左旋,可记为右左-右左。第84页/共150页第八十

53、四页,共150页。85 构造二叉平衡(查找)树的方法构造二叉平衡(查找)树的方法(fngf)是:是:在插入过程中,采用平衡旋转技术。在插入过程中,采用平衡旋转技术。例如例如(lr):依次插入的关键字为依次插入的关键字为5, 4, 2, 8, 6, 95424258665842向右旋转向右旋转(xunzhun)一次一次先向右旋转先向右旋转再向左旋转再向左旋转第85页/共150页第八十五页,共150页。86426589642895向左旋转(xunzhun)一次继续继续(jx)插入关键插入关键字字 9第86页/共150页第八十六页,共150页。87单向(dn xin)右旋转A2B1BLBrArhhh

54、LL型A0B0BLBrArhhh旋转(xunzhun)后保证中序序列不变第87页/共150页第八十七页,共150页。88A-2B-1BrBLALhhhRR型A0B0BrALBLhhh旋转(xunzhun)后保证中序序列不变单向(dn xin)左旋转第88页/共150页第八十八页,共150页。89双向旋转(xunzhun),先左后右A2B-1ArhBLhLR型CCLh-1Crh-11A-1B0ArhBLhCLh-1Crh-1C0第89页/共150页第八十九页,共150页。90双向旋转(xunzhun),先右后左B-1A0BrhALhCLh-1Crh-1C0A-2B1BrhALhRL型CLh-1C

55、rh-1C1第90页/共150页第九十页,共150页。911200120180012028013001200800300120180-1300900120180030-1900450120180030-290045-16001201800300900450600第91页/共150页第九十一页,共150页。92三、三、 B - 树树1定义定义(dngy)2查找查找(ch zho)过程过程3插入插入(ch r)操作操作4删除操作删除操作第92页/共150页第九十二页,共150页。93B-B-树:一种平衡的多路查找树树:一种平衡的多路查找树, ,一棵一棵m m阶的阶的B-B-树或为空树,树或为空树,

56、或为满足下列特性的或为满足下列特性的m m叉树:叉树:树中每个节点至多树中每个节点至多(zhdu)(zhdu)有有m m棵子树棵子树若根结点不是叶子结点,则至少有两棵子树若根结点不是叶子结点,则至少有两棵子树除根结点之外的所有非终端结点至少有除根结点之外的所有非终端结点至少有m/2m/2 棵子树棵子树所有的非终端结点中包含下列信息数据所有的非终端结点中包含下列信息数据(n,A0,K1,A1,K2,A2,Kn,An)(n,A0,K1,A1,K2,A2,Kn,An) 其中其中Ki(i=1,n)Ki(i=1,n)为关键字,且为关键字,且KiKi+1,(i=1,n-1); KiKi+1,(i=1,n-

57、1); Aj Aj(0 0j jn n)为指向子树根结点的指针,且)为指向子树根结点的指针,且AjAj(0 0jnjn) 所指子树中所有结点的关键字均小所指子树中所有结点的关键字均小kj+1; Ankj+1; An所指子树中所指子树中 所有结点的关键字均大于所有结点的关键字均大于kn;kn; n n(m/2m/2-1-1n nm-1m-1)为关键字的个数;)为关键字的个数;n+1n+1为子树个为子树个数。数。第93页/共150页第九十三页,共150页。941351182437811112713934753641994阶B-树,每个节点(ji din)最多4棵子树,3个关键字。一棵m阶B-树每个

58、节点(ji din)最多有m棵子树m-1个关键字,最少有m/2棵子树m/2-1个关键字第94页/共150页第九十四页,共150页。95 非叶结点中的多个非叶结点中的多个(du (du )关键字均关键字均自小至大有序排列,即:自小至大有序排列,即:K1 K2 K1 K2 Kn;key1.keynum中查找(ch zho) i ,i使 得:p-Keyi=kkeyi+1 if (i0 & p-keyi=K) found=TRUE; else q=p; p=p-ptri; / q 指示 p 的双亲,在子树中查找(ch zho) if (found) return (p,i,1); / 查找(ch zh

59、o)成功 else return (q,i,0); / 查找(ch zho)不成功 Search (Btree P , KeyType K) for (int i=0; iPkeynum &P keyi+1=k; i+); return i;第102页/共150页第一百零二页,共150页。1033插入插入(ch r)1)插入后,该结点的关键字个数nm, 不修改指针(zhzhn); 例如在查找不成功之后,需进行插入(ch r)。显然,关键字插入(ch r)的位置必定在最下层的非叶结点,有下列几种情况:第103页/共150页第一百零三页,共150页。1042)插入后,该结点的关键字个数)插入后,该

60、结点的关键字个数 n=m, 则需进行则需进行“结点分裂结点分裂”,令,令 s = m/2, 在原结点中保留在原结点中保留 (A0,K1,。,。, Ks-1,As-1);); 建新结点建新结点 (As,Ks+1,。,。 ,Kn,An);); 将(将(Ks,p)插入双亲)插入双亲(shungqn)结点;例如结点;例如3)若双亲为空,则建新的根结点)若双亲为空,则建新的根结点(ji din)。 例如例如第104页/共150页第一百零四页,共150页。105例如例如(lr):下列为下列为 3 阶阶B-树树50 20 40 80 插入插入(ch r)关键字关键字 = 60, 60 80 90, 60 8

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论