数据结构-第8章-查找(作业).ppt
《数据结构-第8章-查找(作业).ppt》由会员分享,可在线阅读,更多相关《数据结构-第8章-查找(作业).ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第8章 查找 第第8章章查找查找8.1查找的基本概念查找的基本概念8.2静态查找表静态查找表8.3动态查找表动态查找表8.4哈希表哈希表第8章 查找 8.1查找的基本概念查找的基本概念关关键键字字:数数据据元元素素的的某某个个数数据据项项的的值值,用用它它可可以以标标识识列列表表中中的的一一个个或或一一组组数数据据元元素素。如如果果一一个个关关键键字字可可以以唯唯一一标标识识列列表表中中的的一一个个数数据据元元素素,则则称称其其为为主主关关键键字字,否否则则为为次次关关键键字字。当数据元素仅有一个数据项时,当数据元素仅有一个数据项时,数据元素的值就是关键字。数据元素的值就是关键字。第8章 查找
2、 查查找找:根根据据给给定定的的关关键键字字值值,在在查查找找表表中中确确定定一一个个其其关关键键字字与与给给定定值值相相同同的的数数据据元元素素,并并返返回回该该数数据据元元素素在在查查找找表表中中的的位位置置。若若找找到到相相应应的的数数据据元元素素,则则称称查查找找是是成成功功的的,否否则则称称查查找找是是失失败败的的,此此时时应应返返回回空空地地址址及及失失败败信信息息,并并可可根根据据要要求求插插入这个不存在的数据元素。入这个不存在的数据元素。第8章 查找 8.2静态查找表静态查找表8.2.1顺序查找法顺序查找法顺顺序序查查找找法法的的过过程程是是:从从表表中中最最后后一一个个记记录
3、录开开始始,逐逐个个进进行行记记录录的的关关键键字字和和给给定定值值的的比比较较,若若某某个个记记录录的的关关键键字字和和给给定定值值比比较较相相等等,则则查查找找成成功功,否否则则查查找找失失败败。存存储储结结构构通通常常为为顺顺序结构,也可为链式结构。序结构,也可为链式结构。第8章 查找/静态查找表的顺序存储结构静态查找表的顺序存储结构typedefstructElemType*elem;/数据元素存储空间基址,建数据元素存储空间基址,建/表时按实际长度分配,表时按实际长度分配,0号单元留空号单元留空intlength;/表长度表长度SSTable;第8章 查找 基于顺序结构的算法如下:基
4、于顺序结构的算法如下:intSearch_Seq(SSTableST,KeyTypekey)/在顺序表在顺序表ST中顺序查找其关键字等于中顺序查找其关键字等于key的数据元素。若的数据元素。若找到,则函数值为该元素在表中的位置,否则为找到,则函数值为该元素在表中的位置,否则为0。算法。算法9.1inti;ST.elem0.key=key;/哨兵哨兵for(i=ST.length;!EQ(ST.elemi.key,key);-i);/从后往前找从后往前找returni;/找不到时,找不到时,i为为0其中其中ST.elem0称为监视哨,可以起到防止越界的作用。称为监视哨,可以起到防止越界的作用。第
5、8章 查找 8.2.2 有序表的查找有序表的查找 折折半半查查找找法法又又称称二二分分法法查查找找法法,这这种种方方法法适适用用于于有有序序表表。其其基基本本过过程程是是:将将表表中中间间位位置置记记录录的的关关键键字字与与查查找找关关键键字字比比较较,如如果果两两者者相相等等,则则查查找找成成功功;否否则则利利用用中中间间位位置置记记录录将将表表分分成成前前、后后两两个个子子表表,如如果果中中间间位位置置记记录录的的关关键键字字大大于于查查找找关关键键字字,则则进进一一步步查查找找前前一一子子表表,否否则则进进一一步步查查找找后后一一子子表表。重重复复以以上上过过程程,直直到到找找到到满满足
6、足条条件件的的记记录录,使使查查找找成成功功,或或直直到到子子表表不不存在为止,此时查找不成功。存在为止,此时查找不成功。第8章 查找 图图8.1折半查找示意图折半查找示意图第8章 查找 折半查找的算法如下:折半查找的算法如下:intSearch_Bin(SSTableST,KeyTypekey)/在有序表在有序表ST中折半查找其关键字等于中折半查找其关键字等于key的数据元素。若的数据元素。若找到,则函数值为该元素在表中的位置,否则为找到,则函数值为该元素在表中的位置,否则为0。算法。算法9.2low=1;high=ST.length;/置区间初值置区间初值while(lowlchild=N
7、ULL;free(p);(2)若若p结结点点只只有有左左子子树树,或或只只有有右右子子树树,则则可可将将p的的左左子子树树或或右右子子树树直直接接改改为为其其双双亲亲结结点点f的的左左子子树树,即即:f-lchild=p-lchild(或(或f-lchild=p-rchild););free(p);(3)若若p既有左子树,既有左子树,又有右子树,又有右子树,如图如图8.6(a)所示。所示。此时有两种处理方法:此时有两种处理方法:第8章 查找 方方法法1:首首先先找找到到p结结点点在在中中序序序序列列中中的的直直接接前前驱驱s结结点点,如如图图8.6(b)所所示示,然然后后将将p的的左左子子树树
8、改改为为f的的左左子子树树,而而将将p的的右右子子树树改改为为s的的右右子子树树:f-lchild=p-lchild;s-rchild=p-rchild;free(p);结果如图结果如图8.6(c)所示。所示。方方法法2:首首先先找找到到p结结点点在在中中序序序序列列中中的的直直接接前前驱驱s结结点点,如如图图8.6(b)所所示示,然然后后用用s结结点点的的值值替替代代p结结点点的的值值,再再将将s结结点点删删除除,原原s结结点点的的左左子子树树改改为为s的的双双亲亲结结点点q的的右右子子树树:p-data=s-data;q-rchild=s-lchild;free(s);结结果果如如图图8.
9、6(d)所示。所示。第8章 查找 图图8.6二叉排序树删除示意二叉排序树删除示意第8章 查找 3.二叉排序树的查找二叉排序树的查找因因为为二二叉叉排排序序树树可可看看作作是是一一个个有有序序表表,所所以以在在二二叉叉排排序序树树上上进进行行查查找找与与折折半半查查找找类类似似,也也是是一一个个逐逐步步缩缩小小查查找找范范围围的的过过程程。根根据据二二叉叉排排序序树树的的特特点点,首首先先将将待待查查关关键键字字k与根结点关键字与根结点关键字t进行比较,如果:进行比较,如果:(1)k=t,则返回根结点地址;则返回根结点地址;(2)kt,则进一步查右子树。则进一步查右子树。第8章 查找 8.3.2
10、平衡二叉树平衡二叉树平平衡衡二二叉叉树树又又称称为为AVL树树。一一棵棵平平衡衡二二叉叉树树或或者者是是空空树树,或或者者具具有有下下列列性性质质的的二二叉叉排排序序树树:左左子子树树与与右右子子树树的的高高度度之之差的绝对值小于等于差的绝对值小于等于1;左子树和右子树也是平衡二叉树。左子树和右子树也是平衡二叉树。平衡因子平衡因子:结点的左子树深度与右子树深度之差。:结点的左子树深度与右子树深度之差。显显然然,对对一一棵棵平平衡衡二二叉叉排排序序树树而而言言,其其所所有有结结点点的的平平衡衡因因子子只只能能是是-1、0,或或1。当当我我们们在在一一个个平平衡衡二二叉叉排排序序树树上上插插入入一
11、一个个结结点点时时,有有可可能能导导致致失失衡衡,即即出出现现绝绝对对值值大大于于1的的平平衡衡因因子子,如如2、-2。图图8.7中中给给出出了了一一棵棵平平衡衡二二叉叉排排序序树树和和一一棵棵失失去去平平衡衡的二叉的二叉排序树。排序树。第8章 查找 图图8.7平衡与不平衡的二叉排序树平衡与不平衡的二叉排序树第8章 查找 u已已知知一一棵棵平平衡衡二二叉叉排排序序树树如如图图8.9(a)所所示示。在在A的的左左子子树树的的左左子子树树上上插插入入15后后,导导致致失失衡衡,如如图图8.9(b)所所示示。为为恢恢复复平平衡衡并并保保持持二二叉叉排排序序树树的的特特性性,可可将将A改改为为B的的右
12、右子子,B原原来来的的右右子子改改为为A的的左左子子,如如图图8.9(c)所所示示。这这相相当当于于以以B为为轴轴,对对A做了一次顺时针旋转做了一次顺时针旋转。图图8.9不平衡二叉树的调整不平衡二叉树的调整(1)第8章 查找 u已已知知一一棵棵平平衡衡二二叉叉排排序序树树如如图图8.10(a)所所示示。在在A的的右右子子树树B的的右右子子树树上上插插入入70后后,导导致致失失衡衡,如如图图8.10(b)所所示示。为为恢恢复复平平衡衡并并保保持持二二叉叉排排序序树树的的特特性性,可可将将A改改为为B的的左左子子,B原原来来的的左左子子改改为为A的的右右子子,如如图图8.10(c)所所示示。这这相
13、相当当于于以以B为为轴轴,对对A做了一次逆时针旋做了一次逆时针旋转。转。图图8.10不平衡二叉树的调整不平衡二叉树的调整(2)第8章 查找 u已已知知一一棵棵平平衡衡二二叉叉排排序序树树如如图图8.11(a)所所示示。在在A的的左左子子树树B的的右右子子树树上上插插入入45后后,导导致致失失衡衡,如如图图8.11(b)所所示示。为为恢恢复复平平衡衡并并保保持持二二叉叉排排序序树树的的特特性性,可可首首先先将将B改改为为C的的左左子子,而而C原原来来的的左左子子改改为为B的的右右子子;然然后后将将A改改为为C的的右右子子,C原原来来的的右右子子改改为为A的的左左子子,如如图图8.11(c)所所示
14、示。这这相相当当于于对对B做做了了一一次次逆逆时时针针旋旋转转,对对A做做了了一一次次顺时针旋转。顺时针旋转。第8章 查找 图图8.11不平衡二叉树的调整不平衡二叉树的调整(3)第8章 查找 u已已知知一一棵棵平平衡衡二二叉叉排排序序树树如如图图8.12(a)所所示示。在在A的的右右子子树树的的左左子子树树上上插插入入55后后,导导致致失失衡衡,如如图图8.12(b)所所示示。为为恢恢复复平平衡衡并并保保持持二二叉叉排排序序树树的的特特性性,可可首首先先将将B改改为为C的的右右子子,而而C原原来来的的右右子子改改为为B的的左左子子;然然后后将将A改改为为C的的左左子子,C原原来来的的左左子子改
15、改为为A的的右右子子,如如图图8.12(c)所所示示。这这相相当当于于对对B做了一次顺时针旋转,做了一次顺时针旋转,对对A做了一次逆时针旋转。做了一次逆时针旋转。第8章 查找 图8.12 不平衡二叉树的调整(4)第8章 查找 1)LL型型图图8.13二叉排序树的二叉排序树的LL型平衡旋转型平衡旋转第8章 查找 2)LR型型图8.14 二叉排序树的LR型平衡旋转 第8章 查找 图8.15 二叉排序树的RR型平衡旋转 3)RR型型第8章 查找 4)RL型型图8.16 二叉排序树的RL型平衡旋转 第8章 查找 8.4哈希表哈希表哈哈希希法法又又称称散散列列法法、杂杂凑凑法法或或关关键键字字地地址址计
16、计算算法法等等,相相应应的的表表称称为为哈哈希希表表。这这种种方方法法的的基基本本思思想想:首首先先在在元元素素的的关关键键字字k和和元元素素的的存存储储位位置置p之之间间建建立立一一个个对对应应关关系系H,使使得得p=H(k),H称称为为哈哈希希函函数数。创创建建哈哈希希表表时时,把把关关键键字字为为k的的元元素素直直接接存存入入地地址址为为H(k)的的单单元元;以以后后当当查查找找关关键键字字为为k的的元元素素时时,再再利利用用哈哈希希函函数数计计算算出出该该元元素素的的存存储储位位置置p=H(k),从从而而达达到到按按关关键键字直接存取元素的目的。字直接存取元素的目的。第8章 查找 当当
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 查找 作业
限制150内