数据结构详解

数据结构

线性结构

  • 一个有序数据元素的集合
  • 其中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的

非线性结构

  • 线性结构的对立面

数组

定义

复制代码
数组是一种线性数据结构,用于存储相同类型的元素。
每个元素都有一个唯一的索引,通过索引可以快速访问数组中的元素。

特点

  • 数组的长度是固定的,一旦创建就不能更改。

  • 元素在内存中是连续存储的。

  • 支持随机访问,通过索引可以直接访问数组中的任意元素。

链表

定义

复制代码
链表是一种线性数据结构,由节点(Node)组成,每个节点包含数据和一个指向下一个节点的指针。

特点

  • 链表允许动态分配内存空间,大小不固定。

  • 节点在内存中可以不连续存储,通过指针连接。

  • 插入和删除节点的操作效率高,但访问效率较低。

队列(Queue)

定义

复制代码
队列是一种基于先进先出(First In First Out,FIFO)原则的线性数据结构。

特点

  • 主要操作包括入队(Enqueue)和出队(Dequeue)

  • 只能在队尾入队,在队头出队

  • 常用于任务调度、广度优先搜索等场景

栈(Stack):

定义

复制代码
栈是一种基于后进先出(Last In First Out,LIFO)原则的线性数据结构。

特点

  • 主要操作包括压栈(Push)和出栈(Pop)

  • 只能在栈顶进行插入和删除操作

  • 常用于跟踪方法调用、表达式求值、内存管理等场景

树(Tree):

定义

  • 树是一种非线性的数据结构,由节点(Node)和边(Edge)组成。

  • 每个节点包含数据元素,而边定义了节点之间的关系。

  • 树的一个特殊节点称为根(Root),根节点没有父节点,其他节点都有一个父节点。

  • 每个节点可以有零个或多个子节点,同一层级上的节点称为兄弟节点。

  • 树的常见类型包括二叉树、二叉搜索树、平衡树、红黑树等。

二叉树(Binary Tree)

  • 定义:每个节点最多有两个子节点,分左右
  • 遍历:
    • 前序:中左右(根左右)
    • 中序:左中右(左根右)
    • 后序:左右中(左右根)
  • 定义:
    • 二叉搜索树是一种有序的二叉树
    • 对于每个节点,其左子树的所有节点值小于节点本身的值,右子树的所有节点值大于节点本身的值
  • 查询
    • 平均时间的时间复杂度为 O(log n),最差情况为 O(n)
  • 定义: AVL 树是一种自平衡的二叉搜索树,它确保任意节点的左右子树的高度差不超过 1
  • 查询:时间复杂度为 O(log n)
  • 插入、删除:
    • 由于插入或删除导致左右子树的高度差大于1,此时需要旋转某些节点调整树高度,使其再次达到平衡状态
    • 左旋:
    • 右旋:

红黑树(Red-Black Tree)

  • 定义: 红黑树是一种自平衡的二叉搜索树,通过在每个节点上增加额外的颜色信息(红色或黑色),来确保树的平衡
相关推荐
清木!8 小时前
排序算法比较
数据结构·算法·排序算法
汉克老师9 小时前
GESP6级C++考试语法知识(十七、数据结构(三、认识队列 Queue))
数据结构·c++·队列·gesp6级·gesp六级·数组模拟队列
JavaWeb学起来10 小时前
Python学习教程(六)数据结构List(列表)
数据结构·python·python基础·python教程
啊董dong13 小时前
noi-2026年5月12号小测验
数据结构·c++·算法
南境十里·墨染春水13 小时前
数据结构 —— 链表
数据结构·链表
图码14 小时前
二分查找进阶:如何在有序数组中快速找到Upper Bound?
数据结构·算法·面试·分类·柔性数组
Cthy_hy14 小时前
树状数组(BIT)进阶:差分优化实现区间修改、区间查询
数据结构·python·算法
代码中介商16 小时前
红黑树完全指南:从五条性质到完整插入删除实现
数据结构·算法
Sarvartha18 小时前
单链表的顺序建立与结点的删除(期末题复现)
数据结构
Dlrb121119 小时前
数据结构-链表
数据结构·链表·逻辑结构·单向链表·物理结构·valgrind工具