数据结构-B树实现

数据结构实验B树的C++代码实现 采用整数为顶点值和多叉链表为存储结构,实现抽象数据类型B树。ADT BTNode{ 数据对象:D是具有相同特性的数据元素的集合,称为节点集。 数据关系: 若D为空集,则称为空树; (1)树中每个结点最多含有m棵子树; (2)若根结点不是叶子结点,则至少有2个子树; (3)除根结点之外的所有非终端结点至少有┌m/2┐棵子树; (4)每个非终端结点中包含信息:(n,A0,K 阅读详情

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

B树实现。

 

package com.data.struct;


public class BTree {
	private Node root;
	private int degree;
	
	public BTree(int degree,int [] data){
		this.degree=degree;
		//create();
		for(int i=0;i<data.length;i++){
			insert(data[i]);
		}
	}
	
	private void create(){
		Node node=new Node();
		node.leaf=true;
		root=node;
	}
	
	public void insert(int key){
		if(root==null){
			Node node=new Node();
			node.leaf=true;
			node.key[0]=key;
			node.n=1;
			root=node;
			return;
		}
		Node r=root;
		if(r.n==2*degree-1){
			Node s=new Node();
			root=s;
			s.leaf=false;
			s.n=0;
			s.child[0]=r;
			r.parent=s;
			splitChild(s,0);
			insertNotFull(s,key);
		}else{
			insertNotFull(r,key);
		}
	}
	
	public void printTree(){
		System.out.print("      ");
		for(int i=0;i<root.n;i++){
			System.out.print(root.key[i]);
		}
		innerPreorderWalk(root,1);
		System.out.println();
	}
	
	private void innerPreorderWalk(Node node,int depth){
		if(node!=null){
			for(int i=6-depth*2;i>0;i--){
				System.out.print(" ");
			}
			for(int i=0;i<node.n;i++){
				System.out.print(node.key[i]);
			}
			System.out.print("-");
			if(node!=root){
				for(int i=0;i<node.parent.n;i++){
					System.out.print(node.parent.key[i]);
				}
			}
			System.out.println();
			for(int i=0;i<node.n+1;i++){
				innerPreorderWalk(node.child[i],depth+1);
			}
			
		}
		
	}
	
	private void splitChild(Node node,int i){
		Node z=new Node();
		z.parent=node;
		Node y=node.child[i];
		z.leaf=y.leaf;
		z.n=degree-1;
		for(int j=0;j<degree-1;j++){
			z.key[j]=y.key[j+degree];
		}
		if(!y.leaf){
			for(int j=0;j<degree;j++){
				z.child[j]=y.child[j+degree];
				y.child[j+degree].parent=z;
			}
		}
		y.n=degree-1;
		for(int j=node.n;j>=i+1;j--){
			node.child[j+1]=node.child[j];
		}
		node.child[i+1]=z;
		for(int j=node.n-1;j>=i;j--){
			node.key[j+1]=node.key[j];
		}
		node.key[i]=y.key[degree-1];
		node.n=node.n+1;
	}
	private void insertNotFull(Node node,int key){
		int i=node.n-1;
		if(node.leaf){
			while(i>=0&&key<node.key[i]){
				node.key[i+1]=node.key[i];
				i=i-1;
			}
			node.key[i+1]=key;
			node.n+=1;
		}else{
			while(i>=0&&key<node.key[i]){
				i=i-1;
			}
			i=i+1;
			Node child=node.child[i];
			if(child.n==2*degree-1){
				splitChild(node,i);
				if(key>node.key[i]){
					i=i+1;
				}
			}
			insertNotFull(node.child[i],key);
		}
	}
	
	public SearchResult search(int key){
		return innerSearch(root,key);
	}
	private SearchResult innerSearch(Node node,int key){
		int i=0;
		while(i<degree*2-1 && key>node.key[i]){
			i=i+1;
		}
		if(i<degree*2-1 && key==node.key[i]){
			SearchResult result=new SearchResult();
			result.setIndex(i);
			result.setNode(node);
			return result;
		}else if(node.leaf){
			return null;
		}else{
			return innerSearch(node.child[i],key);
		}
	}
	
	public class SearchResult{
		private Node node;
		private int index;
		public Node getNode() {
			return node;
		}
		public void setNode(Node node) {
			this.node = node;
		}
		public int getIndex() {
			return index;
		}
		public void setIndex(int index) {
			this.index = index;
		}
		
		
	}
	
	public  class Node{
		private Node parent;
		private Node []child=new Node[2*degree];
		private int [] key=new int[2*degree-1];
		private boolean leaf;
		private int n;
		public boolean isLeaf() {
			return leaf;
		}
		public void setLeaf(boolean leaf) {
			this.leaf = leaf;
		}
		
		public void addChild(int index,Node node)throws Exception{
			if(child[index]!=null){
				throw new Exception("child is not null");
			}
			child[index]=node;
			node.parent=this;
			this.leaf=false;
			n=n+1;
			if(n>2*degree-1){
				throw new Exception("n exceeded");
			}
		}
		public void adKey(int index ,int k)throws Exception{
			if(key[index]!=-1){
				throw new Exception("key is not empty");
			}
			key[index]=k;
		}
		
	}

	public static void main(String[] args) {
		int [] data=new int[]{1,2,3,4,5,6,7,8,9};
		BTree btree=new BTree(2,data);
		System.out.println();
		btree.printTree();
		int [] data2=new int[]{9,8,7,6,5,4,3,2,1};
		BTree btree2=new BTree(2,data2);
		System.out.println();
		btree2.printTree();
		int [] data3=new int[]{1,8,3,9,4,6,5,2,7};
		BTree btree3=new BTree(2,data3);
		System.out.println();
		btree3.printTree();
	}

}


删除还没实现待续。

 

 

 

数据结构实现(1)——B树 本文介绍了B树的定义和基本性质,重点分析了B树的插入、删除操作,然后实现了一个C++版本。仅供网友参考。主要参考书籍《数据结构——用面向对象方法与C++语言描述》(清华大学出版社,殷人昆主编)、《数据结构——C++描述》(清华大学出版社,金元平编著)。        定义:一棵 阅读详情

相关推荐

[从头学数学] 第260节 Python实现数据结构:B+树

剧情提要: 阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇 它里面讲了些什么,就来看看啦。 正剧开始: 星历2016年09月08日 13:04:01, 银河系厄尔斯星球中华帝国江南行省。 [工程师阿伟]正在和[机器小伟]一起研究[计算几何]]。 # #!/usr/bin/env python from

微笑的彩虹的博客 3005

java数据结构之树

无论是链表,栈还是队列,它们都是线性结构,每个节点的左边最多一个节点,右边也最多一个节点,对于大量的输入数据,线性表的访问时间太慢,不宜使用。树是一种非线性的数据结构,其大部分操作的运行时间平均为O(logn)。树的标准定义:    树(tree)是包含n(n>0)个节点的有穷结合,其中: 每个元素称为节点(node); 有一个特定的节点称为根节点或树根(root); 除根节点之外的其余数据元素被

个人学习所得 999

数据结构基础-B树的实现

B树是重要的数据结构。我们用C语言如何实现,是非常关键的。它的规则严格,所以一步一步都要严格按照规则来。

1043

B树的实现

二叉搜索树我们已经了解了很多种形式了,有AVLTree、红黑树等,不过,这都是在二叉搜索树的基础上加了些东西(平衡因子、颜色),其本质还是二叉搜索树。现在我们遇到一个问题:要是要查找的数据量很大的时候,还用这个,那么树的深度将会很深,那么要怎么解决呢?要保证数据量不变的情况下,将树的深度降低。这就是B树了,今天我们就来了解一下B树的原理,以及实现过程。B-树的定义(数据结构书上就是这么写的,不要读作

jhcconan614的博客 522

C++实现B+树数据结构与算法

数据结构是组织和存储数据的方式,它决定着数据如何被使用和操作。良好的数据结构能够提高算法的执行效率,降低系统开销。常见的数据结构有线性结构、树形结构、图结构等。

weixin_42591413的博客 802

Java实现B+树数据结构实战教程

B+树是一种树型数据结构,它是B树的变种,广泛应用于数据库和文件系统中。与B树相比,B+树的所有数据都存储在叶子节点中,且叶子节点之间通过指针连接形成一个有序链表。这样的结构优化了范围查询的效率,并使得数据存取更加高效。B+树具有以下特性:平衡性:确保每次访问的时间复杂度稳定在O(log n)。顺序性:叶子节点之间的指针保证了数据的顺序访问。空间利用率:非叶子节点仅存储键(keys)而不存储记录,提高空间使用效率。

weixin_35757531的博客 1206

B树及其Java实现详解

B-Tree应该是大多数像我一样以计算机科学为学习专业的大学生所熟悉的。其最初目的是通过尽可能减少存储I / O操作来减少在计算机硬盘驱动器上花费的时间。该技术在数据库和文件系统等计算机领域中发挥了很好的作用。大数据和NoSQL分布式数据库系统(由于廉价的硬件和互联网增长)B-Tree及其变体在数据存储方面发挥着前所未有的重要作用。 本文中将讨论和解释如何使用Java来完成BTree数据结构的实现。

herry816的博客 4543

李宏毅机器学习hw3

Homework 3 - Convolutional Neural Network 1作业概述 在food_11文件中有三个文件分别是training、validation、testing,打开training和validation可以看见总共有11种食物(0-10的类别编号),而testing是没有类别编号的。 然后用卷积神经网络对食物图片进行分类。 2导入用到的库 torch库 这个我弄了半天,直接pip总是timeout,用镜像源下下来又出现OSError: [WinError..

老问题的博客 4189

B-Tree 数据结构及Java 实现

1.B-Tree定义在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。2.为什么引入B-Tree?首先,包括红黑树是将输入存入内存的一种内部查找树。而B树是前面平衡树算法的扩展,它支持保存在磁盘或者网络上的符号表进行外部查找,这些文件可能比我们以前考虑的输入要大的多(难以存入内存)。既然内容...

Bruce_shan的博客 4444

Python实战:5分钟搞定固定翼无人机三自由度仿真(附完整代码)

本文提供了一个基于Python的固定翼无人机三自由度仿真快速实现方案。通过面向对象设计,封装了核心运动学模型,并对比了欧拉法与龙格-库塔法两种积分方法。文章附有完整实例代码,帮助算法工程师和研究人员在5分钟内搭建轻量级仿真环境,用于快速验证控制律、路径规划等核心算法逻辑。

docker7nomad的博客 749

通信工程学习:什么是ASK振幅键控、FSK频移键控、PSK相移键控

ASK、FSK和PSK是三种基础数字调制技术。ASK通过改变载波振幅传输信息,实现简单但抗干扰弱;FSK利用频率变化传递信号,抗干扰较强但频谱利用率一般;PSK通过相位变化编码数据,抗干扰和频谱效率最优但同步要求高。三种技术各具特点,分别适用于不同通信场景:ASK用于低速光纤通信,FSK常见于无线广播,PSK则广泛应用于Wi-Fi、蓝牙等现代通信系统。

limengshi138392的博客 8731

Java数据结构与算法解析(九)——B树

B树简介定义在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。特点阶为M的B树是一颗具有以下特点的树: 1.数据项存储在树叶上 2.非叶子节点直到M-1个关键字以指示搜索的方向:关键字i代表子树i+1中最小的关键字 3.树的根或者是一片树叶,或者其儿子在2和M之间 4.除根外,所有非树

一个码农的博客 1万+

VASP计算层错能(SFE)全攻略2

本文介绍了使用VASP计算纯镍(Ni)层错能(SFE)的具体步骤。首先构建Ni的FCC单胞并扩展为超胞,通过修改原子位置引入堆垛层错;随后分别计算完美晶体和含层错结构的能量;最后通过能量差与层错面积之比求得SFE值。计算需注意k点网格、截断能和超胞尺寸的收敛性测试,并推荐使用PAW赝势和ASE等工具辅助结构构建。

weixin_50519490的博客 1992

数据结构之B+树及其实现

上一篇 B树及其实现 下一篇 红黑树及其实现 简介 B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。B+ 树通常用于数据库和操作系统的文件系统中。 B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度 B+树是B树的变体,也是一种多路搜索树。B树相对于B+树的优点是,如果经常访问的数据离根节点很近,而B树的非叶子节点本身存有关键字其数据的地址,所以这种数据检索的时候会要比B+树快。 B+树性质: 1 B+树的搜索与B

weixin_49561445的博客 2963

MOLDFLOW 2012模流分析基础到实战视频教程

├ 1第一讲MF软件安装与界面定制及模流前期准备工作及分析流程介绍 ├ 2第二讲MF建模工具条命令讲解与图层的运用 ├ 3第三讲MF网格类型与适应范围及网格划分、诊断、修复与统计 ├ 4第四讲MF中CAD doctor 模块对导入模型的修复方法与实例 ├ 5第五讲MF中常见各种流道浇口及水路的建模方法与外部导入方法上 ├ 6第六讲MF产品模型导入CAD DOCTOR与修复 ├ 7第七讲MF分析序列设定与网格的划分与诊断及修复 ├ 8第八讲MF材料选择与成型工艺参数设定 ├ 9第九讲MF创建浇注系统:主流道、

QQ_1987083845的博客 2547

【Claude】Auto mode cannot determine the safety of an action 报错已解决

Claude Code Auto mode 安全分类器报错完整解析,涵盖 temporarily unavailable、could not evaluate、transcript exceeded 三种情况的根因与处理

博客 1万+

数据结构:B树、B+树详解和C语言实现

数据结构:B树、B+树详解和C语言实现B树的定义什么是B树为什么要用B树B树的性质B+树B+树与B树的区别B+树的特点C语言实现数据结构定义创建B树初始化一个空节点根据给定的数据集合进行建树节点插入判断节点是否是满节点进行递归插入子树的分裂按层打印B树 B树的定义 什么是B树 B树是专门为磁盘或其他直接存取的辅助存储设备设计的一类平衡查找树,可以实现O(logN)时间复杂度的存取操作。 B树类似...

black_kyatu的博客 4548

基于YOLOv11的农作物病虫害检测系统设计与实现

我们使用公开的IP102病虫害数据集作为基础,该数据集包含102种病虫害类别,覆盖水稻、小麦、玉米等多种主要农作物。图像数量:75,222张类别数:102图像分辨率:从640×480到4000×3000不等标注格式:PASCAL VOC格式此外,我们还收集了部分田间实际拍摄的图像以增强模型泛化能力。

YOLO 596

C语言实现高级数据结构之B树

通过C语言实现B树的添加、查询、删除等操作。

微小冷的学习笔记 2838

第10章 shellcode实战:18 神级开源shellcode工具:donut

Donut是一款shellcode生成器,可将C/C++、C#生成的PE文件转换为shellcode文件,同时支持JS、XSL、VBS脚本转换为shellcode。以下“原生”EXE/DLL指非托管PE文件(包括并不限于C/C++、delphie等编写生成的可执行文件),可以直接由系统加载运行,区别于.Net生成的托管文件。被处理exe/dll为32位程序,则需要用32为的shellcode加载器启用,exe/dll为64位的就用64位shellcode加载器启用。

李小咖·网安技术库 2797

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【数据结构】B树的介绍及其实现C++

多次的访问IO,这样的速度是非常的慢的,此时就引入了BTree这个结构。我们只需要将关键字和其映射的数据的地址放到内存中的BTree中,就可以很快的定位到数据的地址,然后去磁盘中查找了。

m0_72532428的博客 1119

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

B树数据结构的实现

B树其实就是多路平衡树,主要用于外存储的一种数据结构。 B树的代码实现,主要参考《算法导论》,在看之前,自己尝试写了三遍,都不理想。 主要在于结点的插入和删除操作,如何不需要任何回溯。 给出代码如下: #include "BTree.h" #include #include #define DEBUG_TREE #ifdef DEBUG_TREE #defin

BaikalHU 1439

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

数据结构B树的实现

B 树是一种(Multiway Balanced Search Tree),其设计目标在于,从而。不同于二叉树,B 树的每个节点可以存储多个关键字和多个子节点指针,这使得它能在较少的层数中容纳更多数据。正因为这种结构,B 树常常用于外部存储系统,比如。

laimaxgg 1731

数据结构课程设计 B树的实现

参考来源 知识点 https://www.cnblogs.com/nullzx/p/8729425.html 别人的B树的实现 https://blog.youkuaiyun.com/qq965194745/article/details/78323470

Authur_gyc 522

数据结构与算法【B树】的Java实现+图解

B树的节点属性,与其他树不太相同,首先是key可以有多个,因此要设置为数组,孩子节点也未知,因此也要设置为数组。特性3:除根结点与叶子节点外,每个节点至少有ceil(m/2)个孩子,根节点不是叶子节点时,最少有两个孩子。当经过合并之后,根结点可能会存在为null的情况,此时让根节点中的 0 号孩子替代掉根节点就好。父结点 3 移动到左侧孩子节点中,右侧孩子节点中的第一个key 5 移动到父结点中,左旋结束。于是将右侧节点移除,同时将父结点的值与被移除节点的值都放在最初的左孩子节点中。

zmbwcx的博客 1864

数据结构——B+树(附C++实现代码)

一个m每一个节点最多有m个子节点每一个非叶子节点(除根节点)最少有 ⌈m/2⌉ 个子节点如果根节点不是叶子节点,那么它至少有两个子节点有k个子节点的非叶子节点拥有k− 1 个键所有的叶子节点都在同一层所有的键值对(即数据记录)都存储在叶子节点中,非叶子节点仅存储键(索引)用于路由。所有的叶子节点通过指针连接成一个有序链表,便于范围查询和顺序访问。非叶子节点中的键也会出现在叶子节点中,作为索引。注:由于m=2时B+树的实际意义并不大,因此本文实现的代码仅支持m>=3的B+树。

Daydream_maker的博客 2845
上一篇: 算法实践-任务调度-最小惩罚算法-贪心算法
下一篇: 数据结构-裴波那契堆实现
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值