查找算法选编.ppt

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
顺序表的查找运算 线性表有两种基本的查找运算。 按序号查找GetData(L,i): 要求查找线性表L中第i个数据元素,其结果是L.elem[i-1] 按内容查找Locate(L,e): 要求查找线性表L中与给定值e相等的数据元素,其结果是:若在表L中找到与e相等的元素,则返回该元素在表中的序号;若找不到,则返回一个“空序号”,如-1。 顺序表的按内容查找 算法分析:查找运算可采用顺序查找法实现,即从第一个元素开始,依次将表中元素与e相比较,若相等,则查找成功,返回该元素在表中的序号;若e与表中的所有元素都不相等,则查找失败,返回“-1”。 算法实现: int? Locate(SeqList L,ElemType e) {? i=0 ; ?//i为计数器,从第一个元素开始比较 ?? while ((i=L.length-1)(L.elem[i]!=e) )? /*顺序扫描表,直到找到值为e的元素, 或扫描到表尾而没找到*/ i++; ??? if? (i=L.length-1)? ?????? return(i+1);? /*若找到值为e的元素,则返回其序号*/ ??? else???? ?????? return(-1);? /*若没找到,则返回空序号*/ } 算法描述 查找过程:将表分成几块,块内无序,块间有序;先确定待查元素所在块,再在块内查找 适用条件:分块有序表 算法实现 用数组存放待查元素,每个数据元素至少含有关键字域 建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针 3.二叉排序树的插入算法 根据动态查找表的定义,“插入”操作在查找不成功时才进行; 50 30 80 20 90 10 85 40 35 25 23 88 例如: 是二叉排序树。 66 不 思考:二叉排序树的中序遍历序列有什么特点? 二叉排序树的中序遍历序列是一个有序序列(升序) 2.二叉排序树的查找算法 1)若给定值等于根结点的关键字,则查找成功; 2)若给定值小于根结点的关键字,则继续在左子树上进行查找; 3)若给定值大于根结点的关键字,则继续在右子树上进行查找。 否则, 若二叉排序树为空,则查找不成功; 50 30 80 20 90 85 40 35 88 32 例如: 二叉排序树 查找关键字 == 50 , 50 50 35 , 50 30 40 35 50 90 , 50 80 90 95 从上述查找过程可见: 在查找过程中,生成了一条查找路径: 从根结点出发,沿着左分支或右分支逐层向下直至关键字等于给定值的结点; 或者 从根结点出发,沿着左分支或右分支逐层向下直至指针指向空树为止。 ——查找成功 ——查找不成功 若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程得到。 30 20 10 40 35 25 23 设 key = 22 22 45 24 12 53 90 30 27 {45, 24, 53, 12, 30, 27, 90} (1)被删除的结点是叶子; 4.二叉排序树的删除算法 可分三种情况讨论: 和插入相反,删除在查找成功之后进行,并且要求在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性。 (1)被删除的结点是叶子; (2)被删除的结点只有左子树或者只有右子树; (1)被删除的结点是叶子; (2)被删除的结点只有左子树或者只有右子树; (3)被删除的结点既有左子树,也有右子树。 50 30 80 20 90 85 40 35 88 32 (1)被删除的结点是叶子结点 例如: 被删关键字 = 20 88 其双亲结点中相应指针域的值改为“空” 50 30 80 20 90 85 40 35 88 32 (2)被删除的结点只有左子树 或者只有右子树 其双亲结点的相应指针域的值改为 “指向被删除结点的左子树或右子树”。 被删关键字 = 40 80 50 30 80 20 90 85 40 35 88 32 (3)被删除的结点既有左子树,也有右子树 40 40 以其前驱替代之,然后再删除该前驱结点 被删结点 前驱结点 (中序遍历) 被删关键字 = 50 50 30 80 20 90 85 40 35 88 32 40 被删关键字 = 50 90 85 88 二、平衡二叉树 树中每个结点的左、右子树深度之差的绝对值不大于1 。 例如: 5 4 8 2 5 4 8 2 1 是平衡树 不是平衡树 平衡 因子 又称AVL树,是具有如下性质的二叉树: 如何构建一棵平衡二叉排序树? 构建过程类似于二叉排序树的建立过程,即在二

文档评论(0)

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

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

1亿VIP精品文档

相关文档