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

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个关键字值。
  • 所有节点内的关键字值按从小到大顺序链接。
  • 非叶子节点只保存关键字值,叶子节点既保存关键字值也保存数据行的地址信息。
  • 非叶子节点的关键字值都存在于子节点中,在子节点元素中是最大(或最小)元素。
  • 所有叶子节点的高度一致。
    在这里插入图片描述
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值