数据结构 B 树与B树.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
£ 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.3 B- 树和 B+ 树 ( 1 ) B- 树 ① B- 树的定义 B- 树是一种平衡的多路查找树。一棵 m 阶的 B- 树,或为空树,或 为满足下列特性的 m 叉树: 1 .树中每个结点至多有 m 棵子树; 2 .若根结点不是叶子结点,则至少有两棵子树; 3 .除根之外的所有非终端结点至少有 棵子树; ? ? 2 / m 4 .所有的非终端结点中包含下列信息数据: (n, A 0 , K 1 , A 1 , K 2 , A 2 , … , K n , A n ) 其中: K i (i = 1, … , n) 为关键字,且 K i K i+1 (i = 1, … , n - 1) ; A i (i = 1, … , n) 为指向子树根结点的指针,且指针 A i-1 所指子树中 所有结点的关键字均小于 K i (i = 1, … , n) , A n 所指子树中所有结 点的关键字均大于 K n , 为关键字的个数(或 n + 1 为子树个数)。 ? ? ) 1 1 2 / ( ? ? ? ? m n m 5 .所有的叶子结点都出现在同一层次上,并且不带信息(可以看作是 外部结点或查找失败的结点,实际上这些结点不存在,指向这些结 点的指针为空)。 ②图形表示 图 9.7 一棵 4 阶的 B- 树 t a b c f e g d h 1 35 1 11 2 43 78 1 18 1 27 1 39 1 99 3 47 53 64 F F F F F F F F F F F F 从根结点出发,沿指针 搜索结点 和 在 结点内进行 顺序(或折半) 查找 两个过程 交叉进行。 查找过程: 若 查找成功 ,则 返回指向 被查关键字所 在 结点的指针 和 关键字在结点中的位置 ; 若 查找不成功 ,则 返回插入位置 。 #define m 3 // B- 树的阶,暂设为 3 typedef struct BTNode { int keynum; // 结点中关键字个数,即结点的大小 struct BTNode *parent; // 指向双亲结点 KeyType key[m + 1]; // 关键字向量, 0 号单元未用 struct BTNode *ptr[m + 1]; // 子树指针向量 Record *recptr[ m + 1]; // 记录指针向量, 0 号单元未用 } BTNode, *BTree;; ③ C 语言说明 typedef struct { BTNode *pt; // 指向找到的结点 int i; //1..m ,在结点中的关键字序号 int tag; //1: 查找成功, 0: 查找失败 } Result; //B- 树的查找结果类型 ④ B- 树的查找 1 .算法思想:在 B- 树上进行查找的过程是一个顺时针查找结点和在结点 的关键字中进行查找交叉进行的过程。 2 .算法实现: Result SearchBTree (BTree T, KeyType K) { // 在 m 阶 B- 树 T 上查找关键字 K ,返回结果 (pt, i , tag) 。若查找成功, // 则特征值 tag = 1 ,指针 pt 所指结点中第 i 个关键字等于 K ;否则 // 特征值 tag = 0 ,等于 K 的关键字应插入在指针 pt 所指结点中第 i 和 // 第 i + 1 个关键字之间 p = T; // 初始化, p 指向待查结点, q 指向 p 的双亲 q = NULL; found = FALSE; i = 0; 算法 9.11 如下: while (p !found) { i = Search (p, K); // 在 p - key[1..keynum] 中查找, //i 使得 : p - key[i] = K p - key[i + 1]

文档评论(0)

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

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

1亿VIP精品文档

相关文档