数据结构第七章_查找1.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 查找 查找的基本概念 顺序表、有序表和索引表的查找 二叉平衡树 B-树、B+树的查找 散列表的查找 关键字 标识一个数据元素的某个数据项或组合项的值 查找表 具有同一类型(属性)的数据元素(记录)组成 集合 ,分为静态查找表和动态查找表两类. 查找 按给定的某个值kx,在查找表中查找关键字为给定值kx的数据元素(记录)。 typedef struct { KeyType key; // 关键字字段,可以是整型,字符串型、构造类型等 …… // 其它字段 } ElemType; 查找速度 占用存储空间多少 算法本身复杂程度 平均查找长度ASL(Average Search Length) 为确定记录在表中的位置,需和给定值进行比较的关键字的个数的期望值叫查找算法的~ 顺序存储结构 typedef struct { ElemType *elem; //数组基址 int length; //表长度 } S_TBL; 链式存储结构 typedef struct NODE { ElemType elem; // 结点的值域 struct NODE *next; //下一个结点指针域 } NodeType; 查找过程 从表的一端开始逐个进行记录的关键字和给定值的比较 条件 有序表——表中数据元素按关键字升序或降序排列 折半查找的思想 每次将待查记录所在区间缩小一半 例:05,13,19,21,37,56,64,75,80,88,92 查找的关键字K=21。 05,13,19,21,37,56,64,75,80,88,92 05,13,19,21,37,56,64,75,80,88,92 05,13,19,21,37,56,64,75,80,88,92 条件 (1)确定查找区间的中点位置mid (2)将待查的K值与seqlist[mid].key比较 (3)若相等,查找成功并返回此位置 (4) 若不相等,确定新的查找区间,返回(1), 重新开始二分法查找 (5) 当上下界相等时,结束查找过程 查找过程 将表分成几块,块内无序,块间有序 先确定待查记录所在块,再在块内查找 适用条件 分块有序表—是后一个子表中所有记录的关键字均大于前一个子表中的最大关键字 算法实现 用数组存放待查记录,每个数据元素至少含有关键字域 建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针 以二叉链表作为二叉排序树的存储结构 typedef struct NODE { ElemType elem; //数据元素字段 struct NODE *lc,*rc; //左、右指针字段 }NodeType; //二叉树结点类型 原则 从二叉排序树中删除一个结点之后,使其仍能保持二叉排序树的特性即可。 p为叶子结点,只需修改p双亲f的指针 f- lc=NULL ,f-rc=NULL p只有左子树或右子树 p只有左子树,用p的左孩子代替p (1)(2) p只有右子树,用p的右孩子代替p (3)(4) p左、右子树均非空 沿p左子树的根C的右子树分支找到S,S的右子树为空,将S的左子树成为S的双亲Q的右子树,用S取代p (5) 若C无右子树,用C取代p (6) 对给定序列建立二叉排序树 若左右子树均匀分布,则其查找过程类似于有序表的折半查找。 若给定序列原本有序,则建立的二叉排序树就蜕化为单链表,其查找效率同顺序查找一样 需对均匀的二叉排序树进行插入或删除结点后,应对其调整,使其依然保持均匀。 平衡二叉树或者是一棵空树,或者是具有下列性质的二叉排序树 它的左子树和右子树都是平衡二叉树 左子树和右子树高度之差的绝对值(平衡因子)不超过1 左单旋转( LL型的处理) 右单旋转( RR型的处理) 先左后右双向旋转( LR型的处理) 先右后左双向旋转( RL型的处理) 第七章 查找 查找的基本概念 顺序表、有序表和索引表的查找 二叉平衡树 B-树、B+树的查找 散列表的查找 学习要点 熟练掌握顺序表和有序表的查找方法。 熟悉静态查找树的构造方法和查找算法,理解静态查找树和折半查找的关系。 熟练掌握二叉排序树的构造和查找方法。 理解二叉平衡树的维护平衡方法。 理解B-树,B+树的特点以及它们的建树过程。 熟练掌握哈希表的构造方法,深刻理解哈希表与其它结构的表的实质性的差别。 掌

文档评论(0)

精华文档888 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档