数据结构--第八章-查找PPT.ppt

  1. 1、本文档共101页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构--第八章-查找PPT

第八章 查 找;查找:根据给定的关键字值,在特定的列表中确定一个其关键字与给定值相同的数据元素,并返回该数据元素在列表中的位置。 ;平均查找长度:为确定数据元素在列表中的位置,需和给定值进行比较的关键字个数的期望值,称为查找算法在查找成功时的平均查找长度。 ;查找的基本方法:;8.2 基于线性表的查找法;不设置监视哨的顺序查找算法;用平均查找长度分析顺序查找算法的性能。;8.2.2 折半查找法(二分法查找法);例如用折半查找法查找10、50的具体过程,其中mid=(low+high)/2,当highlow时,表示不存在这样的子表空间,查找失败。 ;60;用折半查找法查找50的过程:;60;折半查找的算法如下:;用平均查找长度分析折半查找算法的性能;8.2.3 分块查找法;下图为一个索引顺序表;分块查找的基本过程为:;分块查找的平均查找长度由两部分组成:即查找索引表时的平均查找长度为LB,以及在相应块内进行顺序查找的平均查找长度LW。 ASLbs=LB+LW ;LB=;8.3 基于树的查找法;8.3.1 二叉排序树; 由定义可以得出二叉排序树的一个重要性质:中序遍历一个二叉排序树时可以得到一个递增有序序列。 ;使用二叉链表作为存储结构,其结点结构说明如下:;1. 二叉树的插入和生成;二叉排序树的插入算法:; 二叉排序树的生成方法: 假若给定一个元素序列,可以利用上述算法创建一棵二叉排序树。 将二叉排序树初始化为一棵空树,然后逐个读入元素,每读入一个元素,就建立一个新的结点插入到当前已生成的二叉排序树中,即调用上述二叉排序树的插入算法将新结点插入。 ;生成二叉排序树的算法:;设关键字的输入顺序为:45,24,53,12,28,90,按上述算法生成的二叉排序树的过程:;对同样一些元素值,如果输入的顺序不同,则所建的二叉树形态也不同。如果将上述例子中的关键字顺序变为:24,53,90,12,28,45,则生成的二叉排序树为:;2. 二叉排序树的删除;(2)若p结点只有左子树,或只有右子树,则可将p的左子树或右子树直接改为其双亲结点f的左子树。即:f-lchild=p-lchild(或f-lchild=p-rchild);free(p); ;方法一:首先找到p结点在中序序列中的直接前驱s结点,如图 (b) 所示,然后将p的左子树改为f的左子树,而将p的右子树改为s的右子树:f-lchild=p-lchild;s-rchild= p-rchild;free(p);结果如图 (c) 所示。 ;方法二:首先找到p结点在中序序列中的直接前驱s结点,如图 (b) 所示,然后用s结点的值,替代p结点的值,再将s结点删除,原s结点的左子树改为s的双亲结点q的右子树:p-data=s-data;q-rchild= s-lchild;free(s);结果如图 (d) 所示。 ;在二叉排序树中删除结点的算法;if(p==NULL) return t;/*若找不到,返回原来的二叉排序树*/ if(p-lchild==NULL)/*p无左子树*/ {if(f==NULL) t=p-rchild;/*p是原二叉排序树的根*/ else if(f-lchild==p)/*p是f的左孩子*/ f-lchild=p-rchild ; /*将p的右子树链到f的左链上*/ else /*p是f的右孩子*/ f-rchild=p-rchild ;/*将p的右子树链到f的右链上*/ free(p);/*释放被删除的节点p*/ } ;else /*p有左子树*/ { q=p;s=p-lchild; while(s-rchild)/*在p的左子树中查找最右下结点*/ {q=s;s=s-rchild;} if(q==p) q-lchild=s-lchild ;/*将s的左子树链到q上*/ else q-rchild=s-lchild; p-key=s-key;/*将s的值赋给p*/ free(s); } return t; } /*DelBST*/ ;3. 二叉排序树的查找;二叉排序树查找的递归算法为:;二叉排序树查找的非递归算法:;4. 二叉排序树的查找性能; 假设每个元素的查找概率相等,则它们的平均查找长度分别是: ;8.3.2 平衡二叉排序树;40;下面通过实例来说明失衡情况以及相应的调整方法;2.在(a)图A的右子树B的右子树上插入70后,导致失衡,如(b)图。为恢复平衡并保证二叉排序树的特性,可将A改为B的左子,B原来的左子改为A的右子,图(c),即以B为轴,对A做一次逆时针旋转。;3.在(a)图A的左子树B的右子树上插入45后,导致失衡,如(b)图。为恢复平衡并保证二叉排序

文档评论(0)

djdjix + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档