`
hojor
  • 浏览: 109191 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

B树实现

J# 
阅读更多
/*====================*\
 |      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树的实现,包括增、删、改、查操作,并通过图解辅助理解。 B树是一种多路搜索树,其特点在于所有节点可以有多个子节点,每个节点包含若干键(key),每个键将子节点分为两...

    基于B树实现的图书管理系统

    《基于B树实现的图书管理系统》 图书管理系统是信息技术在图书馆管理中的重要应用,而B树作为数据结构的一种,因其高效的数据检索能力,常被用于大量数据的存储和管理。本系统采用B树作为核心数据结构,实现了对...

    B树实现的文件索引 java版

    在这个项目“B树实现的文件索引 java版”中,我们探讨的是如何利用Java语言来实现B树在文件索引中的应用。 B树是一种多路搜索树,它的每个节点可以有多个子节点,通常比二叉树更适合处理大量的数据。这种数据结构的...

    B树+B树实现的图书管理系统(C语言)(广东工业大学课程设计2019).zip

    《基于B树的图书管理系统——C语言实现及广工课程设计解析》 在信息技术领域,数据结构是构建高效算法的基础,而B树作为一种自平衡的查找树,因其高效的查找、插入和删除性能,在数据库系统和文件系统中广泛应用。...

    B树的实现(C++)

    书中详细介绍了B树的理论基础和操作细节,是理解B树实现的重要参考资料。 总结:这个压缩包包含了一个使用C++实现的B树,具有详细的注释,可在VS2013环境下无误运行。对于学习数据结构和算法的初学者,尤其是对B树...

    B树的Java实现

    在给定的博客链接中,作者郑亮分享了关于B树实现的详细步骤和代码示例,这可以作为学习和参考的资源。如果你想要深入理解并动手实践B树,这个链接会是一个很好的起点。 最后,标签“源码”提示我们会有具体的Java...

    精选_基于B树实现的图书管理系统_源码打包

    《基于B树实现的图书管理系统》 图书管理系统是IT领域中的一个重要应用,它涉及到数据库管理、数据结构和算法等多个方面。在这个系统中,选择B树作为数据存储的主要数据结构,体现了设计者对高效检索和存储的理解。...

    b树的C++实现

    在C++中实现B树,我们需要定义一个B树节点类,这个节点类通常会包含键值、指向子节点的指针以及一个指示当前节点键值数量的变量。在`btree.h`头文件中,我们可能会看到如下声明: ```cpp class BTreeNode { public:...

    读书笔记:《算法导论》B树实现.zip

    读书笔记:《算法导论》B树实现

    完整B树算法Java实现代码

    在计算机科学中,B树(B-tree)是一种自平衡的多路查找树,它的设计目的是为了优化磁盘或网络存储环境下的数据检索效率。...在Java中实现B树需要理解其数据结构特点,并适当地处理插入、查找和删除操作,确保树的平衡。

    图书管理系统C语言B树实现

    B树为基本数据结构实现图书的借阅、归还、查询及搜索功能

    Java实现B+Tree

    步骤为数据库文件创建一个B+树索引: (1)生成数据文件, (2)为数据库文件的属性创建B+ 树文件。 (3)给定键值,通过B+树进行查找。同时比较与直接扫描表的性能差别。(利用B+树时可根据内存大小决定放置多少层次到...

    基于 B- 树实现的图书管理系统

    《基于B-树实现的图书管理系统》 在计算机科学领域,数据结构的选择对系统的性能有着至关重要的影响。在这个图书管理系统中,我们运用了B-树(B-tree)这一经典的数据结构,来高效地管理和检索图书信息。B-树是...

    B树的C语言实现,代码比较条理

    2. **可移植性**:C语言的代码可以跨平台编译,使得B树实现可以在多种操作系统上运行。 3. **易读性**:如果代码条理清晰,C语言的代码通常比其他高级语言更易理解和维护。 **文件列表解析** - `CII.sln`:这是一...

    B树索引实现歌曲管理系统 qt界面

    在本项目中,"B树索引实现歌曲管理系统qt界面"是一个使用了数据结构和图形用户界面技术的软件工程实践。下面将详细解释这个系统的关键组成部分及其相关知识点。 首先,我们要理解**B树(B-Tree)**。B树是一种自...

    B树演示程序

    **B树概述** ...在www.pudn.com.txt中,可能包含了关于实现的详细说明或算法的解释,而My_B_tree可能是实现B树的源代码文件,通过阅读这些文件,我们可以更深入地理解这个B树实现的具体细节和工作原理。

    广工数据结构实验-B树

    这个"广工数据结构实验-B树"是一个实践项目,旨在帮助学生理解和实现B树的原理与操作。 B树,全称为Balanced Tree,是一种自平衡的树数据结构,其特点是每个节点可以有多个子节点(通常为2到m个),且所有叶子节点...

    B-tree 树的 Java实现

    通过理解B树的数据结构原理,并结合Java编程语言特性,我们可以构建一个高效且功能完备的B树实现。这样的实现对于学习数据结构、开发数据库系统或是优化磁盘上的数据访问都非常有价值。在实际项目中,B树常用于文件...

    B+树的c语言代码实现

    与B树相比,B+树的所有叶子节点都位于同一层,且叶子节点之间通过指针相互连接,这使得B+树非常适合范围查询和顺序访问。 #### 三、代码结构分析 1. **文件头注释**: - 作者:bysvking - 时间:2012年5月 - ...

    B树索引算法 VC实现

    总结来说,"B树索引算法 VC实现"是一个将B树数据结构应用于VC++环境的项目,通过创建B树节点和相应的操作方法,实现了数据的高效查找、插入和删除。项目附带的文档提供了对算法和实现的详细解释,以及测试验证,对于...

Global site tag (gtag.js) - Google Analytics