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


    1. 数组(Array)

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

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

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

    在这里插入图片描述

    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");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二叉树基于数组的顺序存储方式实现:
    用数组来存储所有的节点。对于节点之间的父子关系,通过数组下标计算得到。如果节点 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    5.8 B+树

    定义:

    • B+树由m叉查找树和有序双向链表组合构成,m>=2。
    • 每个节点至多有m个子节点,非根节点至少有m/2个子节点,根节点至少有2个子节点。
    • 有k个子节点的节点必有k个关键字值。
    • 所有节点内的关键字值按从小到大顺序链接。
    • 非叶子节点只保存关键字值,叶子节点既保存关键字值也保存数据行的地址信息。
    • 非叶子节点的关键字值都存在于子节点中,在子节点元素中是最大(或最小)元素。
    • 所有叶子节点的高度一致。
      在这里插入图片描述
  • 相关阅读:
    【mia】rtc_Push和player拉取
    Android 开机动画的启动过程BootAnimation(基于Android10.0.0-r41)
    【npm如何发布自己的插件包】
    LLVM IR 文档 专门解释 LLVM IR
    Kafka3.x安装以及使用
    [设计模式] 浅谈SOLID设计原则
    多线程总结(线程池 & 线程安全 & 常见锁)
    net基于asp.net的二手商品的交易系统-二手网站-计算机毕业设计
    C++ 实现线程安全的map(OpenHarmony源码实现版)
    竞赛 深度学习+opencv+python实现车道线检测 - 自动驾驶
  • 原文地址:https://blog.csdn.net/lercent/article/details/127754743