B-树 建立

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B-树 建立相关的知识,希望对你有一定的参考价值。

最近数据结构上到了B-树的查找、插入和删除,书上没讲B-树的生成,想问一下怎么生成B树?没B-树的话谈什么查找、插入和删除啊?

一个 B-Tree 是一种针对在块设备上优化操作的数据结构。块设备或磁盘有相当重要的数据访问延迟,尤其是机械硬盘。在随机位置检索单个字节并不比检索更大的数据花费的时间更少。这是 B-Tree 的基本原理,InnoDB 使用的数据页为 16KB。让我们尝试简化 B-Tree 的描述。B-Tree 是围绕这键来组织的数据结构。键用于搜索 B-Tree 内的数据。B-Tree 通常有多个级别。数据仅存储在最底层,即叶子节点。其他级别的页面(节点)仅包含下一级别的页面的键和指针。如果要访问键值的数据,则从顶级节点-根节点开始,将其包含的键与搜索值进行比较,并找到要在下一级访问的页面。重复这个过程,直到你达到最后一个级别,即叶子节点。理论上,每个 B-Tree 级别的读取都需要一次磁盘读取操作。在实践中,总是有内存缓存节点,因为它们数量较少且经常访问,因此适合缓存。一个简单的三级 B-Tree 结构

参考技术A 呵呵,其实数组也可以看做是一棵树的哦
第i个节点的左孩子是2i
右孩子是2i+1
下面是一个连式结构的树的构成
#include"stdio.h"
#include"malloc.h"
typedef struct tree

char data;
struct tree *lchild,*rchild;
lbtree;

lbtree* create()

//ÊäÈëÊý¾ÝʱӦ°´Ç°Ðò±éÀú˳Ðò
lbtree *root;
char ch;
ch=getchar();
getchar();
if(ch=='#')

root=NULL;

else

printf("this node is %c\n",ch);
root=(lbtree *)malloc(sizeof(lbtree));
root->data=ch;
root->lchild=create();
root->rchild=create();

return root;


void main()

create() ;

能不能运行我不知道
但是这个算法是可以构建一棵树的本回答被提问者采纳
参考技术B 其实数组也可以看做是一棵树的哦
第i个节点的左孩子是2i
右孩子是2i+1
下面是一个连式结构的树的构成
#include"stdio.h"
#include"malloc.h"
typedef struct tree

char data;
struct tree *lchild,*rchild;
lbtree;

lbtree* create()

//ÊäÈëÊý¾ÝʱӦ°´Ç°Ðò±éÀú˳Ðò
lbtree *root;
char ch;
ch=getchar();
getchar();
if(ch=='#')

root=NULL;

else

printf("this node is %c\n",ch);
root=(lbtree *)malloc(sizeof(lbtree));
root->data=ch;
root->lchild=create();
root->rchild=create();

return root;


void main()

create() ;

能不能运行我不知道
但是这个算法是可以构建一棵树的
参考技术C 书上讲的应该是算法,具体怎么生成二叉树后面应该也有算法的

以上是关于B-树 建立的主要内容,如果未能解决你的问题,请参考以下文章

[湖南集训]更为厉害 树上主席树-以树深度为下下标建立主席树

[湖南集训]更为厉害 树上主席树-以树深度为下下标建立主席树

[湖南集训]更为厉害 树上主席树-以树深度为下下标建立主席树

[湖南集训]更为厉害 树上主席树-以树深度为下下标建立主席树

关于二叉树怎样建立和四种遍历方法你知道吗?

mysql优化之索引建立的规则