数据结构详解

数据结构

线性结构

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

非线性结构

  • 线性结构的对立面

数组

定义

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

特点

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

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

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

链表

定义

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

  • 定义: 红黑树是一种自平衡的二叉搜索树,通过在每个节点上增加额外的颜色信息(红色或黑色),来确保树的平衡
相关推荐
泥泞开出花朵22 分钟前
LRU缓存淘汰算法的详细介绍与具体实现
java·数据结构·后端·算法·缓存
KarrySmile1 小时前
Day17--二叉树--654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树
数据结构·算法·二叉树·二叉搜索树·合并二叉树·最大二叉树·验证二叉搜索树
凤年徐1 小时前
【数据结构与算法】21.合并两个有序链表(LeetCode)
c语言·数据结构·c++·笔记·算法·链表
程序员老冯头2 小时前
第三十二节 MATLAB函数
数据结构·算法·matlab
lifallen2 小时前
hadoop.yarn 带时间的LRU 延迟删除
java·大数据·数据结构·hadoop·分布式·算法
摸鱼仙人~6 小时前
Redis 数据结构全景解析
数据结构·数据库·redis
玄月初二丶13 小时前
28. 找出字符串中第一个匹配项的下标
c语言·开发语言·数据结构·算法
屁股割了还要学14 小时前
【数据结构入门】时间、空间复杂度的计算
c语言·开发语言·数据结构·c++·算法
秋难降16 小时前
栈:从基础概念到实战解题(详细)
数据结构·算法·排序算法
归云鹤16 小时前
QT信号和槽怎么传输自己定义的数据结构
开发语言·数据结构·qt