/*====================*\
| BTree.h |
\*====================*/
#ifndef _BTREE_H_
#define _BTREE_H_
#define NUM 3
#define KeyType int
#define Status int
typedef struct BTNode {
int keynum;
struct BTNode * parent;
KeyType key[NUM+1];
struct BTNode * ptr[NUM+1];
}BTNode,*BTree;
typedef struct {
BTNode * pt;
int i;
int tag;
}Result;
Result SearchBTree(BTree T, KeyType K);
Status InsertBTree(BTree &T, KeyType K, BTree q, int i);
Status CreateBTree(BTree &T, int size, int *key);
void PrintBTree(BTree T);
#endif
/*===================*\
| Btree.c |
\*===================*/
#include "BTree.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
Result SearchBTree(BTree T,KeyType k)
{
Result result;
BTree p,pre;
Status found = false;
int i = 1;
p = T;
pre = NULL;
while (p && !found)
{
for(i=1;i<p->keynum;i++)
{
if (k <= p->key[i])
break;
}
if (k == p->key[i])
found = true;
else
{
pre = p;
p = p->ptr[i-1];
}
}
result.i = i-1;
if(found)
result.pt = p;
else
result.pt = pre;
result.tag = found;
return result;
}
Status InsertBTree(BTree &T,KeyType K, BTree q,int i)
{
int j, s;
KeyType x;
BTree ap, temp;
bool finished = false;
x = K;
ap = NULL;
while (q && !finished)
{
for (j = q->keynum; j > i; j --)
{
q->key[j + 1] = q->key[j];
q->ptr[j + 1] = q->ptr[j];
}
q->key[i + 1] = x;
q->ptr[i + 1] = ap;
q->keynum ++;
if (q->keynum < NUM)
finished = true;
else
{
s = NUM / 2 + 1;
x = q->key[s];
q->keynum = s - 1;
ap = (BTree)malloc(sizeof(BTNode));
assert(ap != NULL);
ap->keynum = NUM - s;
for ( j = 1; j <= NUM - s; j ++)
{
ap->key[j] = q->key[s + j];
ap->ptr[j - 1] = q->ptr[s + j - 1];
if (ap->ptr[j - 1]!= NULL)
ap->ptr[j - 1]->parent = ap;
}
ap->ptr[NUM - s] = q->ptr[NUM];
if (ap->ptr[NUM - s] != NULL)
ap->ptr[j - 1]->parent = ap;
q = q->parent; //向上分裂
if (q) //求出i的值
{
for (j = 1; j <= q->keynum && x > q->key[j]; j ++)
NULL;
ap->parent = q;
i = j - 1;
}
}//else
}//while
if (!finished) //q = NULL;
{
temp = (BTree)malloc(sizeof(BTNode));
assert(temp != NULL);
temp->parent = NULL;
temp->keynum = 1;
temp->key[1] = x;
temp->ptr[0] = T;
temp->ptr[1] = ap;
if (ap != NULL)
ap->parent = temp;
if (T != NULL)
T->parent = temp;
T = temp;
}
return true;
}
Status CreateBTree(BTree &T, int size, int *key)
{
Result result;
int i;
for (i = 0; i < size; i ++)
{
result = SearchBTree(T, key[i]);
if (!result.tag) //需要插入
if (!InsertBTree(T, key[i],result.pt, result.i))
return false;
}
return true;
}
void PrintBTree(BTree T)
{
int front,rear, i, count;
BTree Queue[1000], temp;
front = rear = 0;
Queue[rear ++] = T;
while (front < rear)
{
temp = Queue[front++];
if (temp != NULL)
{
count = 0;
for (i = 0; i <= temp->keynum; i ++)
if (temp->ptr[i] != NULL)
count ++;
printf("[%d]", count);
for ( i = 1; i <= temp->keynum; i ++)
printf("%d ", temp->key[i]);
printf("\n");
for (i = 0; i <= temp->keynum; i ++)
Queue[rear ++] = temp->ptr[i];
}
}
}
//////////////////////////////////////////////////////////////////////////
int main(void)
{
BTree T = NULL;
int key[15] = { 45, 24, 53, 90, 3, 12, 37, 50, 61, 70, 100, 30, 26, 85, 7};
CreateBTree(T, 15, key);
PrintBTree(T);
return 1;
}
分享到:
相关推荐
本教程将通过一个图书管理的例子深入讲解B树的实现,包括增、删、改、查操作,并通过图解辅助理解。 B树是一种多路搜索树,其特点在于所有节点可以有多个子节点,每个节点包含若干键(key),每个键将子节点分为两...
《基于B树实现的图书管理系统》 图书管理系统是信息技术在图书馆管理中的重要应用,而B树作为数据结构的一种,因其高效的数据检索能力,常被用于大量数据的存储和管理。本系统采用B树作为核心数据结构,实现了对...
在这个项目“B树实现的文件索引 java版”中,我们探讨的是如何利用Java语言来实现B树在文件索引中的应用。 B树是一种多路搜索树,它的每个节点可以有多个子节点,通常比二叉树更适合处理大量的数据。这种数据结构的...
《基于B树的图书管理系统——C语言实现及广工课程设计解析》 在信息技术领域,数据结构是构建高效算法的基础,而B树作为一种自平衡的查找树,因其高效的查找、插入和删除性能,在数据库系统和文件系统中广泛应用。...
书中详细介绍了B树的理论基础和操作细节,是理解B树实现的重要参考资料。 总结:这个压缩包包含了一个使用C++实现的B树,具有详细的注释,可在VS2013环境下无误运行。对于学习数据结构和算法的初学者,尤其是对B树...
在给定的博客链接中,作者郑亮分享了关于B树实现的详细步骤和代码示例,这可以作为学习和参考的资源。如果你想要深入理解并动手实践B树,这个链接会是一个很好的起点。 最后,标签“源码”提示我们会有具体的Java...
《基于B树实现的图书管理系统》 图书管理系统是IT领域中的一个重要应用,它涉及到数据库管理、数据结构和算法等多个方面。在这个系统中,选择B树作为数据存储的主要数据结构,体现了设计者对高效检索和存储的理解。...
在C++中实现B树,我们需要定义一个B树节点类,这个节点类通常会包含键值、指向子节点的指针以及一个指示当前节点键值数量的变量。在`btree.h`头文件中,我们可能会看到如下声明: ```cpp class BTreeNode { public:...
读书笔记:《算法导论》B树实现
在计算机科学中,B树(B-tree)是一种自平衡的多路查找树,它的设计目的是为了优化磁盘或网络存储环境下的数据检索效率。...在Java中实现B树需要理解其数据结构特点,并适当地处理插入、查找和删除操作,确保树的平衡。
B树为基本数据结构实现图书的借阅、归还、查询及搜索功能
步骤为数据库文件创建一个B+树索引: (1)生成数据文件, (2)为数据库文件的属性创建B+ 树文件。 (3)给定键值,通过B+树进行查找。同时比较与直接扫描表的性能差别。(利用B+树时可根据内存大小决定放置多少层次到...
《基于B-树实现的图书管理系统》 在计算机科学领域,数据结构的选择对系统的性能有着至关重要的影响。在这个图书管理系统中,我们运用了B-树(B-tree)这一经典的数据结构,来高效地管理和检索图书信息。B-树是...
2. **可移植性**:C语言的代码可以跨平台编译,使得B树实现可以在多种操作系统上运行。 3. **易读性**:如果代码条理清晰,C语言的代码通常比其他高级语言更易理解和维护。 **文件列表解析** - `CII.sln`:这是一...
在本项目中,"B树索引实现歌曲管理系统qt界面"是一个使用了数据结构和图形用户界面技术的软件工程实践。下面将详细解释这个系统的关键组成部分及其相关知识点。 首先,我们要理解**B树(B-Tree)**。B树是一种自...
**B树概述** ...在www.pudn.com.txt中,可能包含了关于实现的详细说明或算法的解释,而My_B_tree可能是实现B树的源代码文件,通过阅读这些文件,我们可以更深入地理解这个B树实现的具体细节和工作原理。
这个"广工数据结构实验-B树"是一个实践项目,旨在帮助学生理解和实现B树的原理与操作。 B树,全称为Balanced Tree,是一种自平衡的树数据结构,其特点是每个节点可以有多个子节点(通常为2到m个),且所有叶子节点...
通过理解B树的数据结构原理,并结合Java编程语言特性,我们可以构建一个高效且功能完备的B树实现。这样的实现对于学习数据结构、开发数据库系统或是优化磁盘上的数据访问都非常有价值。在实际项目中,B树常用于文件...
与B树相比,B+树的所有叶子节点都位于同一层,且叶子节点之间通过指针相互连接,这使得B+树非常适合范围查询和顺序访问。 #### 三、代码结构分析 1. **文件头注释**: - 作者:bysvking - 时间:2012年5月 - ...
总结来说,"B树索引算法 VC实现"是一个将B树数据结构应用于VC++环境的项目,通过创建B树节点和相应的操作方法,实现了数据的高效查找、插入和删除。项目附带的文档提供了对算法和实现的详细解释,以及测试验证,对于...