[理学]数据结构耿国华高教版 第8章.pptxVIP

  1. 1、本文档共119页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 查 找;第八章 查 找;查找:根据给定的关键字值,在特定的列表中确定一个其关键字与给定值相同的数据元素,并返回该数据元素在列表中的位置。 在查找算法中要用到三类参量,即: ①查找对象K(找什么) ②查找范围L(在哪找) ③查找的结果(K在L中的位置) 其中①、 ②为输入参量,在函数中不可缺少。 ③为输出参量,可用函数返回值表示。;平均查找长度:为确定数据元素在列表中的位置,需和给定值进行比较的关键字个数的期望值,称为查找算法在查找成功时的平均查找长度。;查找的基本方法:;基于线性表的查找法 具有顺序查找法、折半查找法和分块查找法三种 顺序查找法 顺序查找法的特点是:用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。 顺序结构 存储结构: 链式结构;顺序结构有关数据类型的定义:;设置监视哨的顺序查找算法;不设置监视哨的顺序查找算法;用平均查找长度分析顺序查找算法的性能。;8.2.2 折半查找法(二分法查找法) 条件:要求待查找的列表必须是按关键字大小有序排列的顺序表。 基本过程:将表中间位置记录的关键字与查找关键 字比较,如果两者相等,则查找成功;否则利用中 间位置记录将表分成前、后两个子表,如果中间位 置记录的关键字大于查找关键字,则进一步查找前 一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子 表不存在为止,此时查找不成功。;例如用折半查找法查找10、50的具体过程,其中 mid=(low+high)/2,当highlow时,表示不存在这样的子表空间,查找失败。;1 2;用折半查找法查找50的过程:;1 2;折半查找的算法如下:;用平均查找长度分析折半查找算法的性能;8.2.3 分块查找法 分块查找法要求将列表组织成以下索引顺序结构: ★首先将列表分成若干个块(子表)。一般情况下,块的长度均匀,最后一块可以不满。每块中元素任意排列,即块内无序,但块与块之间有序。 ★构造一个索引表。其中每个索引项对应一个块并记录每块的起始位置,和每块中的最大关键字(或最小关键字)。索引表按关键字有序排列。;下图为一个索引顺序表;分块查找的基本过程为: 首先,将待查关键字K与索引表中的关键字进行比较,以确定待查记录所在的块。具体的可用顺序查找法或折半查找法进行。 进一步用顺序查找法,在相应块内查找关键字为K的元素。 例如查找上图索引表中36。;分块查找的平均查找长度由两部分组成:即查找索引表时的平均查找长度为LB,以及在相应块内进行顺序查找的平均查找长度LW。 ASLbs=LB+LW 假定将长度为n的表分成b块,且每块含s个元素,则 b=n/s。又假定表中每个元素的查找概率相等,则每个索引项的查找概率为1/b,块中每个元素的查找概率为1/s。若用顺序查找法确定待查元素所在的块,则有:;LB=;基于树的查找法;8.3.1 二叉排序树 二叉排序树(二叉查找树),它是一种特殊结构的 二叉树,其定义为:二叉树排序树或者是一棵空树,或者是具有如下性质的二叉树: 若它的左子树非空,则左子树上所有结点的值均小于根结点的值; 若它的右子树非空,则右子树上所有结点的值均大于根结点的值; 它的左右子树也分别为二叉排序树。;由定义可以得出二叉排序树的一个重要性质:中序遍历一个二叉排序树时可以得到一个递增有序序列。;使用二叉链表作为存储结构,其结点结构说明如下:;1. 二叉树的插入和生成 已知一个关键字值为Key的结点s,插入的方法: ①若二叉排序树是空树,则Key 成为二叉排序树的根;②若二叉树排序树非空,则将key与二叉树排序树的根进行比较,如果key的值等于根结点的值, 则停止插入,如果key的值小于根结点的值,则将 key插入左子树,如果key的值大于根结点的值,则将key插入右子树。;二叉排序树的插入算法:;二叉排序树的生成方法: 假若给定一个元素序列,可以利用上述算法创建一棵二叉排序树。 将二叉排序树初始化为一棵空树,然后逐个读入元素,每读入一个元素,就建立一个新的结点插入到当前已生成的二叉排序树中,即调用上述二叉排序树的插入算法将新结点插入。;生成二叉排序树的算法:;设关键字的输入顺序为:45,24,53,12,28,90,按上述算法生成的二叉排序树的过程:;对同样一些元素值,如果输入的顺序不同,则所建的二叉树形态也不同。如果将上述例子中的关键字 顺序变为:24,53,90,12,28,45,则生成的二叉排序树为:;2. 二叉排序树的删除 从二叉排序树中删除一个结点,必须保证删除后所得的二叉树仍然满足二叉排序树的性质不变。 删除操作: 首先确定被删除的结点是否在二叉排序树中。若不在,则不做任何操作;否则,假设要删除的结点为 p,结点p的双亲结点为f,并假设结点p是结点f的左孩子(右孩子的情况类

文档评论(0)

小螃蟹文档 + 关注
实名认证
文档贡献者

小螃蟹文档小螃蟹文档小螃蟹文档

1亿VIP精品文档

相关文档