




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
9.1 概述,9.1.1 查找表,9.1.2 相关术语,9.1.3 类型说明,9.2 静态查找表,9.2.1 概述,9.2.2 顺序表的查找,9.2.3 有序表的查找,9.2.4 索引顺序表的查找,9.3 动态查找表,9.3.1 概述,9.3.2 二叉排序树和平衡二叉树,9.3.3 B-树和B+树,9.4 哈希表,9.4.1 定义,9.4.2 哈希函数的构造,9.4.3 处理冲突的方法,9.4.4 哈希表的查找及其分析,第九章查找,9.3 动态查找表,9.3.1 概述,(1)动态查找表的抽象数据类型定义:,ADT DynamicSearchTable 数据对象D:D是具有相同特性的数据元素的集合。各个数据元素均含有 类型相同,可唯一标识数据元素的关键字。数据关系R:数据元素同属一个集合。基本操作P: InitDSTable (初始条件:动态查找表DT存在,e为待插入的数据元素。操作结果:若DT中不存在其关键字等于e.key的数据元素,则插入 e到DT。,DeleteDSTable (初始条件:动态查找表DT存在,Visit是对元素操作的应用函数。操作结果:按某种次序对DT的每个元素调用函数visit ( )一次且仅一 次。一旦visit ( )失败,则操作失败。 ADT DynamicSearchTable,特点:表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。,(2)动态查找表的特点,9.3.2 二叉排序树和平衡二叉树,(1)二叉排序树,二叉排序树(Binary Sort Tree):它或者是一棵空树;或者是具有下列性质的二叉树: 1若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3它的左、右子树也分别为二叉排序树。, 定义, 图形表示,图9.3 二叉排序树示例,(a),(b),例如:,是二叉排序树。,例如:,不是二叉排序树。,通常,取二叉链表作为二叉排序树的存储结构,typedef struct BiTNode / 结点结构 struct BiTNode *lchild, *rchild; / 左右孩子指针 BiTNode, *BiTree;,TElemType data;,2二叉排序树的查找算法:,1)若给定值等于根结点的关键字,则查找成功;2)若给定值小于根结点的关键字,则继续在左子树上进行查找;3)若给定值大于根结点的关键字,则继续在右子树上进行查找。,否则,若二叉排序树为空,则查找不成功;,例如:,二叉排序树,查找关键字,= 50 ,50,50,35 ,50,30,40,35,50,90 ,50,80,90,95 ,从上述查找过程可见,,在查找过程中,生成了一条查找路径:,从根结点出发,沿着左分支或右分支逐层向下直至关键字等于给定值的结点;,或者,从根结点出发,沿着左分支或右分支逐层向下直至指针指向空树为止。,查找成功,查找不成功,算法描述如下:,Status SearchBST (BiTree T, KeyType kval, BiTree f, BiTree / SearchBST, ,否则表明查找不成功,返回 / 指针 p 指向查找路径上访问的最后一个结点, / 并返回函数值为FALSE, 指针 f 指向当前访问 / 的结点的双亲,其初始调用值为NULL,if (!T)else if ( EQ(kval, T-data.key) ) else if ( LT(kval, T-data.key) ) else, p = f; return FALSE; / 查找不成功, p = T; return TRUE; / 查找成功,return SearchBST (T-lchild, kval, T, p ); / 在左子树中继续查找,return SearchBST (T-rchild, kval, T, p ); / 在右子树中继续查找,根据动态查找表的定义,“插入”操作在查找不成功时才进行;,3二叉排序树的插入算法,若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程得到。,Status Insert BST(BiTree / Insert BST, ,s = new BiTNode; / 为新结点分配空间s-data = e; s-lchild = s-rchild = NULL;,if ( !p ) T = s; / 插入 s 为新的根结点,else if ( LT(e.key, p-data.key) ) p-lchild = s; / 插入 *s 为 *p 的左孩子else p-rchild = s; / 插入 *s 为 *p 的右孩子,return TRUE; / 插入成功,(1)被删除的结点是叶子;(2)被删除的结点只有左子树或者只有右子树;(3)被删除的结点既有左子树,也有右子树。,4二叉排序树的删除算法,可分三种情况讨论:,和插入相反,删除在查找成功之后进行,并且要求在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性。,(1)被删除的结点是叶子结点,例如:,被删关键字 = 20,88,其双亲结点中相应指针域的值改为“空”,(2)被删除的结点只有左子树或者只有右子树,其双亲结点的相应指针域的值改为 “指向被删除结点的左子树或右子树”。,被删关键字 = 40,80,(3)被删除的结点既有左子树,也有右子树,以其前驱替代之,然后再删除该前驱结点,Status DeleteBST (BiTree / 不存在关键字等于kval的数据元素 else / DeleteBST,算法描述如下:, ,if ( EQ (kval, T-data.key) ) / 找到关键字等于key的数据元素else if ( LT (kval, T-data.key) ) else, Delete (T); return TRUE; ,return DeleteBST ( T-lchild, kval ); / 继续在左子树中进行查找,return DeleteBST ( T-rchild, kval ); / 继续在右子树中进行查找,void Delete ( BiTree &p ) / 从二叉排序树中删除结点 p, / 并重接它的左子树或右子树 if (!p-rchild) else if (!p-lchild) else / Delete,其中删除操作过程如下所描述:, , , ,/ 右子树为空树则只需重接它的左子树,q = p; p = p-lchild; delete(q);,q,q,/ 左子树为空树只需重接它的右子树,q = p; p = p-rchild; delete(q);,p,p,q,q,q = p; s = p-lchild;while (s-rchild) q = s; s = s-rchild; / s 指向被删结点的前驱,/ 左右子树均不空,p-data = s-data;if (q != p ) q-rchild = s-lchild; else q-lchild = s-lchild; / 重接*q的左子树delete(s);,q,s,5查找性能的分析,对于每一棵特定的二叉排序树,均可按照平均查找长度的定义来求它的 ASL 值,显然,由值相同的 n 个关键字,构造所得的不同形态的各棵二叉排序树的平均查找长 度的值不同,甚至可能差别很大。,由关键字序列 3,1,2,5,4构造而得的二叉排序树,由关键字序列 1,2,3,4,5构造而得的二叉排序树,,例如:,2,1,3,4,5,3,5,4,1,2,ASL =(1+2+3+4+5)/ 5 = 3,ASL =(1+2+3+2+3)/ 5 = 2.2,下面讨论平均情况:,不失一般性,假设长度为 n 的序列中有 k 个关键字小于第一个关键字,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-江苏-江苏经济岗位工一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏堤灌维护工一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江苏-江苏不动产测绘员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西行政岗位工二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西水工闸门运行工五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东造林管护工五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东水生产处理工三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东放射技术员五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东仓库管理员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-安徽-安徽下水道养护工二级(技师)历年参考题库典型考点含答案解析
- XXX加油站风险分级管控台账
- 甘12J8 屋面标准图集
- 购买设备合同
- GB/T 28288-2012足部防护足趾保护包头和防刺穿垫
- GB/T 19666-2019阻燃和耐火电线电缆或光缆通则
- GA/T 1241-2015法庭科学四甲基联苯胺显现血手印技术规范
- 小学和初中科学教学衔接
- 《循证医学》治疗性研究证据的评价和应用
- “李可中医药学术流派论治厥阴病”-课件
- 通用技术作品设计报告
- JJF 1847-2020 电子天平校准规范-(高清现行)
评论
0/150
提交评论