数据结构郝春梅C语言版第8章.ppt

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

第8章 查 找 学习目标与要求: 了解查找的基本概念。 熟练掌握静态查找表的实现和查找算法。 熟练掌握二叉排序树的生成和查找方法。 熟练掌握哈希表的构造方法和查找过程,深刻理解哈希查找和其他查找方法的差别。 掌握各种查找算法在等概率情况下查找成功时平均查找长度的计算。 8.1 基 本 概 念 查找又称为检索,是计算机软件开发中经常使用的一种重要操作之一。查找的方法有很多种,当数据量很大时,分析各种查找算法的效率就显得十分重要。 查找是在查找表中进行的,查找表是由同一类型的数据元素构成的集合。 在查找的过程中,我们经常对查找表进行如下的一些操作。 (1) 查找操作:即查找某一元素是否在表中。 (2) 读取操作:即将查找到的数据元素输出。 (3) 插入操作:即在查找的过程中,若没有某数据元素,则将该数据元素插入到表中。 (4) 删除操作:即在查找的过程中,若找到某一数据元素,则将该数据删除。 8.1 基 本 概 念 下面给查找下一个定义:根据给定的值,在查找表中查找是否存在关键字等于给定值的记录,若存在一个或几个这样的记录,则查找成功,若表中不存在关键字等于给定值的记录,则查找失败。 本章除了要掌握各种查找算法之外,分析算法的时间效率也是本章学习的重点内容。我们用平均查找长度(ASL)来衡量各种查找算法的时间效率,即以关键字和给定值进行比较的平均次数作为衡量查找算法好坏的依据。 8.2 静态查找表 本节讨论在静态查找表中进行查找的几种查找算法。 8.2.1 顺序查找 顺序查找可以使用顺序表或单链表这样的线性结构来存储查找表,并且对记录的先后次序没有要求,记录是随机存放的。 顺序查找的基本思想是: 从线性表的一端开始顺序扫描线性表,依次将扫描到的结点关键字和给定值k作比较,若当前扫描到的结点关键字与k相等,则查找成功,返回该数据元素的存储位置;否则,若扫描结束后,仍未找到关键字等于k的结点,则查找失败,返回查找失败标志。 8.2.1 顺序查找 顺序表的数据类型定义如下。 #define MAXSIZE 100 #define KEYTYPE int typedef struct { KEYTYPE key; }SEQLIST; 顺序查找算法简单,既可以使用顺序表存储元素,又可以使用单链表存储元素,但是执行效率较低,尤其当n较大时,不宜采用这种查找方法。 8.2.2 折半查找 折半查找又称为二分查找。进行折半查找要求查找表存储在顺序表中,且按照关键字递增或递减的顺序排序。 折半查找的基本思想是: 让给定的k值与表中中间位置的数据元素作比较,若相等,则查找成功,若不等,则到表的左半部分或右半部分继续折半查找,直到查找成功或失败。 8.2.2 折半查找 折半查找的具体操作如下: (1) 设置两个指针low和high分别指向顺序表的第一个和最后一个元素。 (2) 当low≤high时,计算中间位置mid= (low+high) /2。 ① 让给定的k值与mid位置的数据元素作比较,若相等,则返回mid值。 ② 若k值小于mid位置的数据元素,则到表的左半部分进行查找,修改high的值为high=mid-1,返回(2),继续折半查找。 ③ 若k值大于mid位置的数据元素,则在表的右半部分进行查找,修改low的值为low=mid+1,返回(2),继续折半查找。 (3) 当lowhigh时,查找失败。 8.2.2 折半查找 折半查找过程如图8.2所示。 8.2.3 分块查找 分块查找又称索引顺序查找,是对顺序查找的一种改进。 分块查找将查找表分成若干子表,每个子表为一块,每块中的关键字不一定有序,但块与块之间有序,即第二块中所有的关键字大于第一块中所有的关键字,以此类推,除此之外,还需建立一个索引表,索引表中包含两部分信息,一个是每块中最大的关键字,另一个是每块在查找表中的起始位置,则索引表中的关键字是递增有序的。 分块查找的基本思想: 根据给定的k值,先在索引表中进行顺序查找或二分查找以确定待查记录在哪一块中,然后在已确定的块中再进行顺序查找。 8.2.3 分块查找 分块查找过程示例的如图8.4所示。 8.3 动态查找表 动态查找表经常要对表中的记录进行插入、删除的操作,同时动态查找表的生成也是在查找过程中动态生成的。 动态查找表的这种特性要求采用灵活的存储方式来组织查找表中的记录,以便高效率地实现动态查找表的查找、插入和删除的操作。 本节重点介绍二叉排序树。 8.3.1 二叉排序树的概念 二叉排序树又称为二叉查找树,它是一种特殊结构的二叉树,其定义为:二叉排序树(Binary Sort Tree)或者是一棵空树,或者是具有如下性质的二叉树: (1) 若它的左子树非空,则左子树上所有结点的值均小于根结点的

文档评论(0)

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

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

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档