- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实例教程(C语言版) 第8章查找的分析与应用 学习目标 了解查找的基本概念。 熟练掌握线性表的顺序查找和二分法查找方法及算法 实现。 熟练掌握二叉排序树的生成和查找方法。 熟练掌握散列表的构造方法、查找过程及解决冲突的 方法。 8.1基本概念 一、查找的定义 查找的定义是:给定一个值K,在含有N个结点的表中找出关键字等于给定值K的结点。 二、查找的分类 1、动态查找和静态查找 2、内查找和外查找 查找的同时进行插入或者删除操作属于动态查找,相反就是静态查找。 整个查找过程都在内存进行属于内查找,查找过程中需要访问外存属于外查找 。 三、平均查找长度 n是结点的个数;ci是找到第i个结点所需进行的比较次数; pi是查找第i个结点的概率,一般情况下p1=p2=…=pn=1/n; 8.2线性表查找 一、顺序查找 1、顺序查找的基本思想:从表的一端开始,顺序扫描线性 表,依次将扫描到结点的关键字和给定值K相比较。如 果存在,查找成功,相反,查找失败。 165 170 160 180 185 查找身高K=180 查找成功! 8.2线性表查找 一、顺序查找 2、顺序查找算法源程序链接 3、顺序查找的优点 4、顺序查找的缺点 算法简单,且对表的结构无任何要求,无论是用顺序还是 链式来存放结点,也无论结点之间是否按关键字有序,它 都同样适用。 查找效率低,因此,当n较大时不宜采用顺序查找。 8.2线性表查找 二、二分查找 1、二分查找的基本思想:每次比较有序表中的中间位置的 数据,如果不相等,有序表逐渐减小一半(如果有序表 减小到空,查找失败) ,重复比较中间位置数据,找到 相等数据,查找成功。 160 170 165 180 185 查找身高K=180 查找成功! 8.2线性表查找 二、二分查找 3、二分查找算法源程序链接 2、二分查找的过程描述 查找K=22 8.2线性表查找 二、二分查找 4、顺序查找的优点 5、顺序查找的缺点 如果是有序表,二分查找的效率高 。二分查找适用于那种一经建立就很少改动、而又经常需要查找的线性表。 二分查找只适用顺序存储结构,为保持表的有序性,在顺序结构里插入和删除必须移动大量的结点。 8.2线性表查找 三、分块查找 1、分块查找的基本思想:首先查找索引表,因为索引表是 有序表,故可采用二分查找或顺序查找,以确定待查的 结点在哪一块,然后在已确定的块中进行顺序查找 。 2、分块查找的优点 插入、删除或查找一个记录时,只要找到该记录所属的块, 块内进行任意插入或删除。 3、分块查找的缺点 增加一个辅助数组的存储空间和初始表分块排序的运算。 8.3二叉排序树 一、二叉排序树定义 1、二叉排序树定义 :满足以下三个性质的二叉树。 ①若它的左子树非空,则左子树上所有结点的值均小于根结点的值; ②若它的右子树非空,则右子树上所有结点的值均大于根结点的值; ③左、右子树本身又各是一棵二叉排序树。 2、举例 8.3二叉排序树 二、二叉排序树的插入和生成 1、插入和生成 过程 ①若二叉排序树T为空,则为待插入的关键字key申请一个新结点,并令其为根; ②若二叉排序树T非空,将key和根的关键字比较,若小于则将key插入根的左子树中,否则插入根的右子树中。 2、举例:已知输入数据序列4,2,5,1,3,6,生成二叉排序树。 4 2 1 3 6 5 3、二叉排序树建立算法源程序链接 8.3二叉排序树 三、二叉排序树的删除 1、删除的三种情况 ①若p结点是叶子,只需将p的双亲parent中指向p的指针域 置空即可。 ②若p结点只有一个孩子,此时只需将child和p的双亲直接连接即可,删去p。 4 2 1 3 6 5 ③若p结点有两个孩子,寻找p结点中序的后继结点q替代p结点。 p p 6 5 2 1 4 7 6 p 3 3 8.3二叉排序树 四、二叉排序树的查找 1、查找过程:若查找成功,则是从根结点出发走了一条从 根到待查结点的路径;若查找不成功,则是从根结点出 发走了一条从根到某个叶子的路径。 2、查找算法 BTreeNode *SearchBST(BTreeNode *T,int key) { if(T==NULL||key==T-key) return T;
文档评论(0)