数据结构详解

数据结构

线性结构

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

非线性结构

  • 线性结构的对立面

数组

定义

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

特点

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

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

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

链表

定义

复制代码
链表是一种线性数据结构,由节点(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)

  • 定义: 红黑树是一种自平衡的二叉搜索树,通过在每个节点上增加额外的颜色信息(红色或黑色),来确保树的平衡
相关推荐
爱敲代码的TOM1 小时前
数据结构总结
数据结构
皮皮哎哟3 小时前
数据结构:嵌入式常用排序与查找算法精讲
数据结构·算法·排序算法·二分查找·快速排序
堕2743 小时前
java数据结构当中的《排序》(一 )
java·数据结构·排序算法
2302_813806224 小时前
【嵌入式修炼:数据结构篇】——数据结构总结
数据结构
Wei&Yan4 小时前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code
long3165 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
张张努力变强7 小时前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
wWYy.7 小时前
数组快排 链表归并
数据结构·链表
李斯啦果8 小时前
【PTA】L1-019 谁先倒
数据结构·算法
Mr Xu_1 天前
告别硬编码:前端项目中配置驱动的实战优化指南
前端·javascript·数据结构