java的常见数据结构


数据存储的常用结构有:栈、队列、数组、链表和红黑树

栈(stack)

  • 特点:先进后出,后进先出
  • 存储数据叫做压栈或者入栈
  • 删除数据叫做弹栈或者出栈

队列

特点:先进先出,后进后出

数组

  • 数组是内存中连续的存储区域,分成若干等分区域,存在索引(可以根据索引快速计算出元素的地址:索引*单位长度)
  • 特点:查询快,增删慢(需要重新new一个数组,迁移元素)

链表

  • 链表在内存中不连续,元素是游离存储的。每个元素会记录下个元素的地址
  • 特点是增删快,查询慢(针对于首尾元素,速度极快,一般是双链表)。

红黑树

了解红黑树,首先了解树
树具有的特点:

  1. 每一个节点有零个或者多个子节点
  2. 没有父节点的节点称之为根节点,一个树最多有一个根节点。
  3. 每一个非根节点有且只有一个父节点
名词 含义
节点 指树中的一个元素
节点的度 节点拥有的子树的个数,二叉树的度不大于2
叶子节点 度为0的节点,也称之为终端结点
高度 叶子结点的高度为1,叶子结点的父节点高度为2,以此类推,根节点的高度最高
根节点在第一层,以此类推
父节点 若一个节点含有子节点,则这个节点称之为其子节点的父节点
子节点 子节点是父节点的下一层节点
兄弟节点 拥有共同父节点的节点互称为兄弟节点

二叉树

  • 二叉树:binary tree 永远只有一个根节点,是每个结点不超过2个节点的树 。

查找二叉树/排序二叉树

  • 查找二叉树/排序二叉树:小的左边,大的右边,但是可能树很高,性能变差。

平衡二叉树

  • 为了做排序和搜索会进行左旋和右旋实现平衡查找二叉树,让树的高度差不大于1
    在这里插入图片描述

旋转

在构建一棵平衡二叉树的过程中,当有新的节点要插入时,检查是否因插入后而破坏了树的平衡,如果是,则需要做旋转去改变树的结构。
旋转的方式分为左旋和又旋:
当左枝过高不平衡是右旋,如果右旋后依然不平衡可以先左旋再右旋
右旋反之

红黑树

  • 红黑树(就是基于红黑规则实现了自平衡的排序二叉树):
    树尽量的保证到了很矮小,但是又排好序了,性能最高的树。
  • 在进行元素插入的时候, 每一次插入完毕以后,使用黑色规则进行校验,如果不满足红黑规则,就需要通过变色,左旋和右旋来调整树,使其满足红黑规则;

红黑树的特性:

  1. 跟节点必须是黑色。
  2. 每个节点或者是黑色,或者是红色。
  3. 每个叶节点(NIL)是黑色。 (这里叶节点是指为空(NIL或NULL)的叶节点)
  4. 如果一个节点是红色的,则它的子节点必须是黑色的。
  5. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点

红黑树模型

  • 红黑树的增删查改性能都好!!!
发布了14 篇原创文章 · 获赞 1 · 访问量 130

猜你喜欢

转载自blog.csdn.net/zhijingege/article/details/103464747