数组、链表、栈、队列、树

news2025/7/25 7:12:37

1. 数组(Array)

定义:数组是一种 线性表 数据结构,它用一组 连续的内存空间 存储一组具有 相同类型 的数据。

Java中 基本数据类型数组 的存储格式

int arr[] = new int[3];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;

在这里插入图片描述

Java中 对象数组 的存储格式

public class Person {
	private String name;
	public Person(String name) {
		this.name = name;
	}
}
Person arr[] = new Person[3];
arr[0] = new Person("Peter");
arr[1] = new Person("Leo");
arr[2] = new Person("Cina");

在这里插入图片描述

2. 链表(Linked List)

定义:链表由一系列节点组成,每个节点除存储数据本身外,还需要额外存储下一个节点的地址。
在这里插入图片描述

3. 栈(Stack)

定义:从操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端(也就是栈顶)插入和删除数据。
特性:先进后出。
在这里插入图片描述

4. 队列(Queue)

定义:从操作特性上来看,队列也是一种“操作受限”的线性表,其限制是仅允许在表的一端(队头)进行插入,而在表的另一端(队尾)进行删除。
特性:先进先出。
在这里插入图片描述

5. 树(Tree)

5.1 树的高度、深度、层数

在这里插入图片描述

5.2 二叉树

定义:每个节点最多有2个子节点,分别是左子节点和右子节点。二叉树并不要求每个节点都必须要有两个子节点。

二叉树链式存储方式的Java代码实现:

public class Node {
	public int val;
	public Node left;
	public Node right;
}

二叉树基于数组的顺序存储方式实现:
用数组来存储所有的节点。对于节点之间的父子关系,通过数组下标计算得到。如果节点 X 存储在数组中下标为 i 位置,那么, 下标为 2i 的位置存储的就是它的左叶子节点,下标为 2i+1 的位置存储的就是它的右叶子节点。(为了方便计算,根节点一般会用下标为1的位置存储)

在这里插入图片描述

5.3 满二叉树

定义:除子节点外,每个节点都有左右两个子节点,并且子节点都在最底层的二叉树。

在这里插入图片描述

5.4 完全二叉树

定义:叶子节点只在最底层和倒数第二层,并且最底层的叶子节点都 靠左排列 的二叉树。

在这里插入图片描述

  • 完全二叉树 基于数组的顺序存储方式仅仅“浪费”了一个下标为0的数组存储空间。

在这里插入图片描述

  • 如果是 非完全二叉树,基于数组的顺序存储方式,会“浪费”比较多的数组存储空间。

    在这里插入图片描述

5.5 二叉查找树:

定义:二叉查找树中的任意一个节点,其左子树中每个节点的值都要小于这个节点的值,而右子树中每个节点的值都要大于这个节点的值。 二叉查找树也被称为二叉搜索树,可以实现快速查找、插入、删除操作。

在这里插入图片描述

5.6 平衡二叉树

定义:二叉树中任意一个节点的左右子树的高度相差不能大于1。

在这里插入图片描述

5.7 红黑树

定义:

  • 红黑树是特殊的二叉查找树
  • 节点被标记为 红色 或者 黑色。
  • 根节点是黑色。
  • 每个叶子节点都是 黑色的 空节点,也就是说,叶子节点不存储数据。
  • 任何上下相邻的节点不能同时为红色,也就是说,红色节点被黑色节点隔开。
  • 每个节点到其 叶子节点 的所有路径,都包含相同数目的黑色节点。
class RedBlackTreeNode {
    public int val;
    public RedBlackTreeNode left;
    public RedBlackTreeNode right;
    // 节点的颜色属性,设置true表示红色
    public boolean color;
    // 节点的parent属性
    public RedBlackTreeNode parent;
}

在这里插入图片描述

5.8 B+树

定义:

  • B+树由m叉查找树和有序双向链表组合构成,m>=2。
  • 每个节点至多有m个子节点,非根节点至少有m/2个子节点,根节点至少有2个子节点。
  • 有k个子节点的节点必有k个关键字值。
  • 所有节点内的关键字值按从小到大顺序链接。
  • 非叶子节点只保存关键字值,叶子节点既保存关键字值也保存数据行的地址信息。
  • 非叶子节点的关键字值都存在于子节点中,在子节点元素中是最大(或最小)元素。
  • 所有叶子节点的高度一致。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拿去吧你,华为出品《看漫画学Python》零基础自学首选~

目前Python在人工智能、机器学习、大数据、数据分析、网络爬虫等领域广泛应用,是非常适合初学者入门和培养编程兴趣的一门语言。相比较其他主流编程语言而言,有更好的可读性,和满足感,上手相对容易。 但是很多零基础的同学不知道…

【C语言】 函数

函数 在计算机科学中,子程序 ,一个大型程序中的某部分代码, 由一个或多个语句块组 成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。 一般会有输入参数并有返回值,提供对过程的封装和细…

元组啊,不就是不可变的列表吗?

B站|公众号:啥都会一点的研究生 相关阅读 整理了几个100%会踩的Python细节坑,提前防止脑血栓 整理了十个100%提高效率的Python编程技巧,更上一层楼 Python-列表,从基础到进阶用法大总结,进来查漏补缺 Python-元组&…

【ABAP】EXIT_SAPLMBMB_001无法Debug调试问题处理

【ABAP】EXIT_SAPLMBMB_001无法Debug调试问题处理 不久前看到SAP Community里面有这样一个问题,可能比较老了,但个人觉得比较新奇,就去做了下面一个测试。 首先通过事务代码“CMOD”对增强“MB_CF001”(更新物料凭证时的客户功能出…

《从零开始:机器学习的数学原理和算法实践》chap6

《从零开始:机器学习的数学原理和算法实践》chap6 学习笔记 文章目录6.1 凸函数6.2 梯度下降引入梯度是什么为啥梯度是上升最快的方向捏梯度下降与参数求解梯度下降过程演示6.3 代码实践 梯度下降一元函数的梯度下降多元函数的梯度下降6.1 凸函数 凸集 何为凸集 凸集…

c# 多线程

案例1 单线程与多线程对比 单线程会卡主线程,此时会将ui界面给卡住。而多线程开启以后就好了 不会卡住主线程,且运行速度快,相当于多个同时运动。 单线程按钮 private void singlethread_Click(object sender, EventArgs e){for

Kafka多生产者消费者自动配置

背景 项目中不同的业务可能会使用多个kafka,按默认的Kafka配置,最多是支持消费者和生产者使用不同的Kafka,如果两个生产者使用不同的Kafka则需要自定义配置,生成对应的bean。 解决方案 多生产者,多消费者&#xff0…

PowerDesigner 设置

PowerDesigner 设置前言推荐PowerDesigner 设置简单设置sql反向生成物理模型物理模型创建索引最后前言 以下内容源自自己 仅供学习交流使用 推荐 第11章 数据库的设计规范【2.索引及调优篇】【MySQL高级】 powerdesign 通过sql反向生成ER模型 PowerDesiner 15 在物理模型中…

Python测试框架之unittest和pytest 的区别

一、Unittest Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。 Unittest支持自动化测试,测试用例的初始化、…

FFN -> GLU -> GAU

1 GLU GLU的起源是2016年由Yann N. Dauphin在 论文:Language Modeling with Gated Convolutional Networks 在语言模型的建模方法上相比于循环神经网络更具有竞争力,提出了一种简单的线性门控单元来堆叠卷积层从而使得文本中的token可以并行化处理来获得上下文的语义…

HTTP响应详解

目录 一.状态码 小结(记住) 二.认识响应正文(body) 三.如何构造http请求 一.状态码 是一个数字,这个数字描述了当前这次请求的状态(成功,失败,失败的原因) http的状态…

Typora基础篇

Markdown基础 标题 #标题名字(#号的个数代表标题的级数) 文件-偏好设置-Markdown里面如果勾选了严格模式,那#与标题名称之间就需要加上一个空格一级标题用1个# 二级标题用2个# 三级标题用3个# 四级标题用4个# 五级标题用5个# ####### …

262-视口,布局视口,视觉视口,移动端适配,less语法,比哪里,DPR,RRI,less的弊端,运算,嵌套,混合,继承,混入,运算,

262-CSS中的单位 ◼ 前面编写的CSS中,我们经常会使用px来表示一个长度(大小),比如font-size设置为18px,width设置为100px。 ◼ px是一个长度(length)单位,事实上CSS中还有非常多的长度单位。 ◼ 整体可以分成两类:  绝对长度单位(Absolute length units);  相…

【uniapp】安装与使用uView组件库:

文章目录一、官网文档二、安装【1】进入控制台【2】初始化package.json【3】安装uView-ui【4】配置main.js【5】配置uni.scss【6】配置easycom组件模式【7】app.vue引入基础样式三、效果一、官网文档 https://www.uviewui.com/ 二、安装 【1】进入控制台 【2】初始化package…

基于sklearn的集成学习实战

集成学习投票法与bagging 投票法 sklearn提供了VotingRegressor和VotingClassifier两个投票方法。使用模型需要提供一个模型的列表,列表中每个模型采用tuple的结构表示,第一个元素代表名称,第二个元素代表模型,需要保证每个模型…

《计算机体系结构量化研究方法第六版》1.3 计算机体系结构的定义

1.3.1 指令集体系结构:计算机体系结构的近距离审视 1、这里通过指令集体系结构 ISA来指代程序员可以看到的实际指令集。ISA相当于软件和硬件之间的界限。 (1)ISA分类 几乎所有的ISA都被划分到了通用寄存器体系结构中,在这种体系…

能源消耗监测管理系统:实现企业用能定额、降低成本节能管理

现如今,很多企业还停留在安装各种节能产品或者是传统节能技术来达到节能目的,但是这些方法不能从根本上实现节能目标,从而导致企业效益。 在国家推动下,能源管理系统加入了互联网的技术以及数字化技术来协同管理,软硬…

二叉树链式结构的实现及简单操作(画图超详细解释)

二叉树链式结构的实现及简单操作前置说明前序遍历中序遍历后序遍历层序遍历如何判断一颗二叉树是完全二叉树通过前序遍历的数组构建二叉树销毁二叉树总结前置说明 由于我们要对二叉树进行操作,我们就得现有一个二叉树,而二叉树的构建又比较复杂&#xf…

李宏毅机器学习作业10——Adversarial Attack

目录 目标和方法 评价方法 导包 Global Settings Data transform Dataset 代理网络 评估模型在非攻击性图像上的表现 Attack Algorithm FGSM I-FGSM MI-FGSM Diverse Input (DIM) 攻击函数 Attack Ensemble Attack 集成模型函数 构建集成模型 进行攻击 FG…

【Node.js】第八章 express编写接口

目录 1. 编写接口 1.1 编写GET接口 2.2 编写POST接口 2. 接口跨域问题 2.1 跨域问题 2.2 使用cors中间件解决跨域问题 2.3 CORS ​2.4 JSONP接口 1. 编写接口 1.1 编写GET接口 2.2 编写POST接口 2. 接口跨域问题 2.1 跨域问题 2.2 使用cors中间件解决跨域问题 cor…