第09章-查找-数据结构-(第二版)-教学课件.ppt
《第09章-查找-数据结构-(第二版)-教学课件.ppt》由会员分享,可在线阅读,更多相关《第09章-查找-数据结构-(第二版)-教学课件.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章第九章 查找查找 静态查找表静态查找表 动态查找表动态查找表 哈希查找表哈希查找表 9.1 9.1 静态查找表静态查找表查找表查找表查找表查找表(table):(table):由同类型的由同类型的由同类型的由同类型的DE(DE(或记录或记录或记录或记录)构成的集构成的集构成的集构成的集合合合合.查找表上的基本运算查找表上的基本运算:建立查找表建立查找表create(ST,n)查找查找search(ST,k)遍历查找表遍历查找表traverse(ST)9.1 9.1 静态查找表静态查找表查找查找查找查找 :在查找表中确定与给定值相等的在查找表中确定与给定值相等的在查找表中确定与给定值相等的
2、在查找表中确定与给定值相等的DEDE的过程的过程的过程的过程.查找结果查找结果:查找成功查找成功查找成功查找成功(table table 中存在给定值的记录中存在给定值的记录中存在给定值的记录中存在给定值的记录)查找不成功查找不成功查找不成功查找不成功(table table 中不存在给定值的记录中不存在给定值的记录中不存在给定值的记录中不存在给定值的记录)查找表分为查找表分为查找表分为查找表分为:静态查找表静态查找表 (对查找表中的数据元素对查找表中的数据元素对查找表中的数据元素对查找表中的数据元素不不不不进行插入和删进行插入和删进行插入和删进行插入和删除操作除操作除操作除操作)动态查找表动
3、态查找表 (对查找表中的数据元素对查找表中的数据元素对查找表中的数据元素对查找表中的数据元素可可可可进行插入和删进行插入和删进行插入和删进行插入和删除操作除操作除操作除操作)9.1 9.1 静态查找表静态查找表一一.顺序表的查找顺序表的查找 FUNC seqsrch(r:sqlisttp;k:keytype):integer;r0.key:=k;i:=n;WHILE ri.key k DO i:=i-1;RETURN(i)ENDF;seqsrch9.1 9.1 静态查找表静态查找表(2)(2)循环结束有两种可能:循环结束有两种可能:循环结束有两种可能:循环结束有两种可能:查找成功查找成功查找成
4、功查找成功 ri.key=kri.key=k 条件控制式条件控制式 查找不成功查找不成功查找不成功查找不成功 i=0i=0 计数控制式计数控制式这两种可能形成两种不同类型的循环控制:这两种可能形成两种不同类型的循环控制:这两种可能形成两种不同类型的循环控制:这两种可能形成两种不同类型的循环控制:条件条件条件条件循环循环循环循环 WHILE WHILE 条件条件条件条件 DO DO 循环体循环体循环体循环体 REPEAT REPEAT 循环体循环体循环体循环体 UNTIL UNTIL 条件条件条件条件 计数循环计数循环计数循环计数循环 FOR i:=n DOWNTO 0FOR i:=n DOWN
5、TO 09.1 9.1 静态查找表静态查找表常规解决办法常规解决办法常规解决办法常规解决办法:(1)(1)条件循环为主条件循环为主条件循环为主条件循环为主 WHILE ri.key k DO WHILE ri.key k DO IF i=1 THEN RETURN(0)IF i=1 THEN RETURN(0)ELSE i:=i-1;ELSE i:=i-1;(2)(2)复合条件复合条件复合条件复合条件 WHILE ri.key k AND i=1 DO i:=i-1;WHILE ri.key k AND i=1 DO i:=i-1;(3)(3)计数循环为主计数循环为主计数循环为主计数循环为主
6、FOR i:=n DOWNTO 1 DO FOR i:=n DOWNTO 1 DO IF ri.key=k THEN RETURN(i)IF ri.key=k THEN RETURN(i)9.1 9.1 静态查找表静态查找表 FUNC seqsrch(r:sqlisttp;k:keytype):integer;r0.key:=k;i:=n;WHILE ri.key k DO i:=i-1;RETURN(i)ENDF;seqsrch3.r03.r0起监视哨作用起监视哨作用起监视哨作用起监视哨作用9.1 9.1 静态查找表静态查找表平均查找长度平均查找长度平均查找长度平均查找长度(ASL):(AS
7、L):查找过程中查找过程中查找过程中查找过程中,给定值需与关键字比较的次数的期望值给定值需与关键字比较的次数的期望值给定值需与关键字比较的次数的期望值给定值需与关键字比较的次数的期望值.n nASL=PASL=Pi iC Ci i i=1i=1其中其中其中其中:P:Pi i 为查找第为查找第为查找第为查找第i i 个记录的概率个记录的概率个记录的概率个记录的概率;C Ci i 为找到第为找到第为找到第为找到第i i 个记录时个记录时个记录时个记录时,已比较的次数已比较的次数已比较的次数已比较的次数.顺序查找的平均查找长度顺序查找的平均查找长度顺序查找的平均查找长度顺序查找的平均查找长度ASLs
8、s=npASLss=np1 1+(n-1)p+(n-1)p2 2+p+pn n n n当当当当p pi i=1/n=1/n时时时时,ASLss=P,ASLss=Pi iC Ci i=(n+1)/2 =(n+1)/2 i=1i=19.1 9.1 静态查找表静态查找表二二.有序表的查找有序表的查找有序表有序表有序表有序表 :查找表中记录按关键字有序排列的表查找表中记录按关键字有序排列的表.即即:ri.keyrmid.key:low:=mid+1;k=rmid.key:found:=true;krmid.key:high:=mid-1;ENDC;IF found THEN RETURN(mid)EL
9、SE RETURN(i)ENDF;binsrch例例例例:k=21,k=21,有序表为有序表为有序表为有序表为:(5,13,(5,13,1919,2121,37,37,5656,64,75,80,88,64,75,80,88,92)92)1.Low=1,high=11,mid=1.Low=1,high=11,mid=6 62.2.21212119 19 low=4 mid=low=4 mid=4 44.21=21 found=true return(4)4.21=21 found=true return(4)折半查找的平均查找长度折半查找的平均查找长度折半查找的平均查找长度折半查找的平均查找长
10、度ASLbs=(n+1)/nlogASLbs=(n+1)/nlog2 2(n+1)-1(n+1)-1 loglog2 2(n+1)-1(n+1)-19.1 9.1 静态查找表静态查找表例例例例.查找表为查找表为查找表为查找表为:22,12,13,8,9,2022,12,13,8,9,20,33,42,44,38,24,48,33,42,44,38,24,48,60,58,74,49,86,5360,58,74,49,86,53索引表为索引表为索引表为索引表为:关键字项关键字项关键字项关键字项指针项指针项指针项指针项2222484886861 17 713139.1 9.1 静态查找表静态查找表
11、查找分为两步查找分为两步查找分为两步查找分为两步:1.1.确定待查记录所在块确定待查记录所在块确定待查记录所在块确定待查记录所在块;(;(可以用顺序或折半查找可以用顺序或折半查找可以用顺序或折半查找可以用顺序或折半查找)2.2.在块内顺序查找在块内顺序查找在块内顺序查找在块内顺序查找.(.(只能用顺序查找只能用顺序查找只能用顺序查找只能用顺序查找)关键字项关键字项关键字项关键字项指针项指针项指针项指针项2222484886861 17 7131322,12,13,8,9,2022,12,13,8,9,20,33,42,44,38,24,4833,42,44,38,24,48,60,58,74,
12、49,86,5360,58,74,49,86,53例如例如例如例如:k=38:k=38第第第第1 1步步步步:k=38:k=38 的记录只可能在块的记录只可能在块的记录只可能在块的记录只可能在块2 2中中中中;第第第第2 2步步步步:从从从从r7r7开始开始开始开始,直到直到直到直到k=ri.key k=ri.key 或或或或i12i12为止为止为止为止.9.2 9.2 动态查找表动态查找表动态查找表的特点是动态查找表的特点是动态查找表的特点是动态查找表的特点是:表结构本身是在查找过程中动态生成的。表结构本身是在查找过程中动态生成的。表结构本身是在查找过程中动态生成的。表结构本身是在查找过程中
13、动态生成的。即查找不成功时,将该记录插入在动态查找表中。即查找不成功时,将该记录插入在动态查找表中。即查找不成功时,将该记录插入在动态查找表中。即查找不成功时,将该记录插入在动态查找表中。一、二叉排序树(一、二叉排序树(一、二叉排序树(一、二叉排序树(Binary Sort Tree)Binary Sort Tree)(又称为二叉查找树)(又称为二叉查找树)(又称为二叉查找树)(又称为二叉查找树)1 1、BSTBST定义:定义:定义:定义:BST BST或者是一棵空树;或者是具有如下性质的或者是一棵空树;或者是具有如下性质的或者是一棵空树;或者是具有如下性质的或者是一棵空树;或者是具有如下性质
14、的BT:BT:若左子树非空,则左子树上所有结点的值均小于根结点的值;若左子树非空,则左子树上所有结点的值均小于根结点的值;若左子树非空,则左子树上所有结点的值均小于根结点的值;若左子树非空,则左子树上所有结点的值均小于根结点的值;若右子树非空,则右子树上所有结点的值均大于根结点的值;若右子树非空,则右子树上所有结点的值均大于根结点的值;若右子树非空,则右子树上所有结点的值均大于根结点的值;若右子树非空,则右子树上所有结点的值均大于根结点的值;左、右子树也为左、右子树也为左、右子树也为左、右子树也为BSTBST9.2 9.2 动态查找表动态查找表78100619012372484553例如:例如
15、:例如:例如:9.2 9.2 动态查找表动态查找表2 2、查找过程为、查找过程为、查找过程为、查找过程为:(1)(1)当前当前当前当前BSTBST非空时,将给定值非空时,将给定值非空时,将给定值非空时,将给定值k k与当前根结点的关键字比较与当前根结点的关键字比较与当前根结点的关键字比较与当前根结点的关键字比较:(2)(2)若相等,查找成功,结束若相等,查找成功,结束若相等,查找成功,结束若相等,查找成功,结束;若若若若k k小于当前根结点的关键字,则将左子树作为当前小于当前根结点的关键字,则将左子树作为当前小于当前根结点的关键字,则将左子树作为当前小于当前根结点的关键字,则将左子树作为当前B
16、ST;BST;若若若若k k大于当前根结点的关键字,则将右子树作为当前大于当前根结点的关键字,则将右子树作为当前大于当前根结点的关键字,则将右子树作为当前大于当前根结点的关键字,则将右子树作为当前BST;BST;(3)(3)重复重复重复重复(1)(1)。9.2 9.2 动态查找表动态查找表算法描述为:算法描述为:FUNC bstsrch(t:bitreptr;k:keytype):bitreptr;查找不成功时返回查找不成功时返回NIL IF (t=NIL)COR(t.key=k)THEN RETURN(t)ELSE IF t.keyk THEN RETURN(bstsrch(t.rchild
17、,k)ELSE RETURN(bstsrch(t.lchild,k)ENDF bstsrch 9.2 9.2 动态查找表动态查找表1.3.BST的插入的插入插入原则插入原则:记下查找不成功时比较的最后一个结点的位:记下查找不成功时比较的最后一个结点的位置,将插入结点作为该结点的左或右孩子。置,将插入结点作为该结点的左或右孩子。PROC insbst(VAR bst:bitreptr;k:keytype);f:=NIL;found:=false;f:=srch_bstree (f,bst,k,found)IF NOT found THEN ins_bstree(f,bst,k)ENDP;insb
18、st9.2 9.2 动态查找表动态查找表PROC ins_bstree(VAR f,bst:bitreptr;k:keytype);new(s);s.key:=k;s.lchild:=NIL;s.rchild:=NIL;IF bst=NIL THEN bst:=s ELSE IF k00 插入后平衡因子的绝对值插入后平衡因子的绝对值插入后平衡因子的绝对值插入后平衡因子的绝对值11 离插入结点最近的失去平衡的祖先结点离插入结点最近的失去平衡的祖先结点离插入结点最近的失去平衡的祖先结点离插入结点最近的失去平衡的祖先结点判别插入结点后可能失去平衡的最小子树的根结点是否失去平衡,判别插入结点后可能失去
19、平衡的最小子树的根结点是否失去平衡,判别插入结点后可能失去平衡的最小子树的根结点是否失去平衡,判别插入结点后可能失去平衡的最小子树的根结点是否失去平衡,(该结点的平衡因子的绝对值(该结点的平衡因子的绝对值(该结点的平衡因子的绝对值(该结点的平衡因子的绝对值11);判别旋转类型作相应处理。判别旋转类型作相应处理。判别旋转类型作相应处理。判别旋转类型作相应处理。9.2 9.2 动态查找表动态查找表1.1.4 4、AVLAVL树上插入结点算法树上插入结点算法树上插入结点算法树上插入结点算法2.2.(1)(1)算法描述算法描述算法描述算法描述 查找查找查找查找 s s 结点的插入位置过程中,记下离结点
20、的插入位置过程中,记下离结点的插入位置过程中,记下离结点的插入位置过程中,记下离s s 最近的,且平衡因子最近的,且平衡因子最近的,且平衡因子最近的,且平衡因子不等于不等于不等于不等于0 0的结点,令的结点,令的结点,令的结点,令 a a 指向该结点;(即可能失去平衡的最小指向该结点;(即可能失去平衡的最小指向该结点;(即可能失去平衡的最小指向该结点;(即可能失去平衡的最小子树的根结点)。子树的根结点)。子树的根结点)。子树的根结点)。修改修改修改修改 a a 至至至至 s s 路径上所有结点的平衡因子值;路径上所有结点的平衡因子值;路径上所有结点的平衡因子值;路径上所有结点的平衡因子值;判别
21、判别判别判别a a 结点的平衡因子绝对值是否大于结点的平衡因子绝对值是否大于结点的平衡因子绝对值是否大于结点的平衡因子绝对值是否大于1 1,若是,作旋转处理,若是,作旋转处理,若是,作旋转处理,若是,作旋转处理(2 2)过程描述过程描述过程描述过程描述 PROC ins_AVLtree(VAR tPROC ins_AVLtree(VAR t:AVLinktpAVLinktp;:;:;:;:keytypekeytype););););在在t为根结点的为根结点的AVL上插入关键字为上插入关键字为K的新结点的新结点 new(s)new(s);sskeykey:=K=K,s slchildlchild
22、:=s=srchildrchild:=NIL=NIL;s sbfbf:=0=0;IF t=NIL THEN t IF t=NIL THEN t:=s =s 插入根结点插入根结点 ELSE ELSE (1)(1)查找查找查找查找s s 的插入位置的插入位置的插入位置的插入位置q,q,同时记下:同时记下:同时记下:同时记下:a a及及及及a a的双亲的双亲的双亲的双亲f f 从根到叶结点搜索从根到叶结点搜索从根到叶结点搜索从根到叶结点搜索 f f:=NIL=NIL;a a:=t=t;p p:=t=t;q q:=NIL=NIL;WHILE pNIL DO WHILE pNIL DO IF p IF
23、p bf 0 THEN abf 0 THEN a:=p=p;f f:=q=q;qq是是是是p p的双亲的双亲的双亲的双亲,p,p、q q是沿路径移动是沿路径移动是沿路径移动是沿路径移动,a,a、f f是跳跃移动是跳跃移动是跳跃移动是跳跃移动 q q:=p=p;IF s IF skeyp key THEN pkeyp key THEN p:=p=p lchildlchild ELSE p ELSE p:=p=p rchild rchild;插入插入插入插入ss IF s IF skeyq key THEN q keyq key THEN q lchild lchild:=s=s ELSE q E
24、LSE q rchildrchild:=s;=s;9.2 9.2 动态查找表动态查找表 (2 2)修改修改修改修改aa至至至至s s 路径上的平衡因子路径上的平衡因子路径上的平衡因子路径上的平衡因子 从从从从a a 到叶到叶到叶到叶 IF s IF skeyakeyakey key THEN pTHEN p:=a=alchild lchild;b b:=p=p;d d:=1=1 ELSE p ELSE p:=a=archild rchild;b b:=p=p;d d:=-1=-1;左子树插入,使左子树深度增左子树插入,使左子树深度增左子树插入,使左子树深度增左子树插入,使左子树深度增1 1,反
25、之右树深度增,反之右树深度增,反之右树深度增,反之右树深度增11 WHILE PS DO WHILE PS DO IF s IF skeypkeypkey key THEN p THEN pbfbf:=1=1;p p:=p=plchildlchild ELSE p ELSE pbfbf:=-1=-1;p p:=p=prchild;rchild;原来从原来从原来从原来从psps的所有结点的叶全部为的所有结点的叶全部为的所有结点的叶全部为的所有结点的叶全部为0 0,所以计算方法并不是用定义左深,所以计算方法并不是用定义左深,所以计算方法并不是用定义左深,所以计算方法并不是用定义左深右右右右深,方向
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 09 查找 数据结构 第二 教学 课件
限制150内