数据结构极速版(更快了解java集合框架)

数据结构概述

数据结构是计算机底层存储、组织数据的方式

指数据相互之间是以什么方式排列在一起的

数据结构是为了更加方便的管理和使用数据,需要结合具体的业务场景来进行选择

一般情况下,精心选择的数据结构可以带来更高的运行或者存储效率

常见的数据结构

1.栈

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

数据进入栈模型的过程称为:压/进栈

数据离开栈模型的过程称为:弹/出栈

2.队列

队列的特点:先进先出,后进后出

数据从后端进入队列模型的过程称为:入队列

数据从前端离开队列模型的过程称为:出队列

3.数组

数组的特点

查询速度快:查询数据通过地址值和索引定位,查询任意数据耗时相同(元素在内存中是连续存储的)

删除效率低:要将原始数据删除,同时后面每个数据前移

添加效率极低:添加位置后的每个据节点s后移,再添加元素

数据是一种查询快,增删慢的数据模型

4.链表

链表中的节点是独立的对象,在内存中是不连续的,每个节点包含数据值下一个节点的地址

链表查询慢,无论查询哪个数据都要从头开始找

链表增删相对快

增加:

删除:

5.二叉树

二叉树是一种树结构,其中每个节点最多有两个子节点,称为左子节点和右子节点。这些子节点不一定是排序的或者有特定的关系。

  • 每个节点最多有两个子节点:左子节点和右子节点。
  • 子节点的顺序不一定有特定规则。
  • 在某些情况下,可能会退化为链表,导致操作的时间复杂度增加。

6.二叉查找树

二叉查找树是一种二叉树,其中每个节点的值大于其左子树中的任何节点的值,小于其右子树中的任何节点的值。这使得在BST中进行搜索、插入和删除操作的平均时间复杂度为O(log n)。

  • 每个节点的值大于其左子树中的任何节点的值,小于其右子树中的任何节点的值。
  • 这种排序特性使得查找、插入和删除的平均时间复杂度为O(log n)。
  • 如果树退化为链表,时间复杂度可能变为O(n)。、

二叉查找树添加节点规则:

1.小的存左边

2.大的存右边

一样的不存

7.平衡二叉树

平衡二叉树是一种特殊的二叉查找树,它的左右子树的高度差不超过1。平衡二叉树的目的是确保在最坏情况下的搜索、插入和删除操作的时间复杂度仍然是O(log n)。

  • 每个节点的左右子树的高度差不超过1。
  • 保持平衡性有助于确保树的高度较小,从而保证了查找、插入和删除操作的时间复杂度稳定在O(log n)。
  • 平衡因子的维护可能导致在插入和删除操作时需要进行树的旋转操作,以保持平衡。

平衡二叉树需要旋转的四种情况

1.左左:一次右旋

  

2.左右:先局部左旋,再整体右旋

3.右右:一次左旋

4.右左:先局部右旋,再整体左旋

8.红黑树

也是一种特殊的二叉查找树,它通过在普通的二叉查找树上增加一些额外的规则和操作来确保树的平衡。红黑树是一种自平衡二叉查找树,它保证了在最坏情况下的时间复杂度为O(log n)。

  • 是一种自平衡的二叉查找树。
  • 红黑树通过对节点着色和应用一些特定规则来保持平衡。
  • 它的平衡性质保证了在最坏情况下,查找、插入和删除操作的时间复杂度为O(log n)。
  • 红黑树相对于平衡二叉树来说,旋转操作更少,因为其自平衡的特性更强,所以在实际应用中更为常见。

红黑树的特性

  1. 节点颜色:每个节点要么是红色,要么是黑色。
  2. 根节点和叶子节点:根节点是黑色的。叶子节点(NIL节点或空节点)都是黑色的。
  3. 红色节点约束:不能有两个相连的红色节点,即红色节点的子节点和父节点都不能是红色
  4. 黑色节点约束:从根节点到叶子节点的任何路径上,黑色节点的数量必须相同。这保证了最长路径不会超过最短路径的两倍。

红黑树添加节点的规则

红黑树的基本操作包括插入、删除和搜索。这些操作都要遵循保持红黑树性质的规则,并在需要时进行旋转和颜色调整。

插入操作: 插入一个新节点时,首先按照二叉搜索树的规则将节点放置在正确的位置上。然后,可能会破坏红黑树的性质,需要通过颜色变换和旋转来修复。主要的情况是通过变换红色节点的父节点、叔节点和祖父节点的颜色,或者进行左旋或右旋操作来调整树的结构。

删除操作: 删除节点时,首先按照二叉搜索树的规则找到要删除的节点。如果被删除的节点有两个子节点,则找到它的后继节点(比它大的最小节点)来替代它,然后删除后继节点。删除后继节点可能会导致红黑树性质被破坏,需要进行相应的修复。删除操作可能需要进行颜色变换、旋转以及树的重构,以确保树的平衡性和红黑树的性质。

数据结构(二叉树)遍历方式

1.前序遍历

(根左右)

2.中序遍历

(左根右)

遍历出来的数据是从小到大的

3.后序遍历

(左右根)

4.层序遍历

从根节点开始一层一层遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CtrlCV 攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值