数据结构和算法分类

数据结构与算法的分类需兼顾 逻辑特性、应用场景、核心目标 三大维度,以下是系统性的分类框架,既覆盖基础理论,也贴合工程实践:

一、数据结构分类(按「逻辑结构+存储结构+核心功能」划分)

数据结构的核心是「组织数据的方式」,分类需区分「逻辑上如何关联」和「物理上如何存储」,再结合功能场景细化:

1. 按逻辑结构分类(数据元素间的关联关系)
类别 定义 核心特点 典型例子
线性结构 数据元素按「线性顺序」排列,除首尾外每个元素仅有一个前驱和一个后继 一对一关系,顺序访问高效 数组、链表、栈、队列、字符串
非线性结构 数据元素间为「一对多」或「多对多」关系 可分支/网状关联,查找/关联高效 树、图、堆、哈希表
2. 按存储结构分类(数据在内存中的物理存储方式)
类别 定义 核心特点 对应逻辑结构
顺序存储结构 数据元素连续存储在内存的「连续地址空间」 随机访问O(1),插入删除O(n) 数组、栈(顺序实现)、队列(顺序实现)
链式存储结构 数据元素分散存储,通过「指针/引用」关联前驱/后继元素 插入删除O(1),随机访问O(n) 链表、树(链式实现)、图(邻接表)
索引存储结构 额外建立「索引表」,记录数据元素的关键字与存储地址映射 查找O(1)~O(logn),额外空间开销 数据库索引、哈希表(索引+数组)
散列存储结构(哈希) 直接通过「哈希函数」计算数据元素的存储地址,无需顺序/指针关联 查找/插入/删除均O(1)(理想) 哈希表、布隆过滤器
3. 按核心功能分类(工程中常用的场景化划分)
类别 核心用途 典型结构
线性存储结构 按顺序/先进先出/后进先出管理数据 数组、链表、栈、队列、双端队列
树形结构 层级化组织数据(一对多),用于排序、搜索、分层遍历 二叉树、二叉搜索树(BST)、红黑树、B树/B+树、堆、Trie树
图形结构 网状组织数据(多对多),用于描述关联关系(路径、依赖等) 有向图、无向图、加权图、邻接矩阵/邻接表
映射结构 键值对关联,用于快速查找/映射(核心是「键→值」的高效映射) 哈希表、跳表、有序映射(TreeMap)
集合结构 存储不重复元素,支持交集、并集、差集等操作 哈希集合(HashSet)、有序集合(TreeSet)、布隆过滤器

二、算法分类(按「核心目标+解题思路+应用场景」划分)

算法的核心是「解决问题的步骤」,分类需突出「时间复杂度、空间复杂度、解题逻辑」的差异:

1. 按核心目标分类(优化方向)
类别 核心目标 典型算法
查找算法 从数据集合中快速找到目标元素 二分查找、哈希查找、二叉搜索树查找、跳表查找
排序算法 将数据集合按指定顺序(升序/降序)排列 冒泡排序、快速排序、归并排序、堆排序、基数排序
搜索算法 在图/树中寻找「路径/目标节点」(比查找更复杂,涉及状态遍历) 深度优先搜索(DFS)、广度优先搜索(BFS)、Dijkstra算法、A*算法
动态规划算法 分解复杂问题为「重叠子问题」,通过缓存子问题结果避免重复计算 斐波那契数列、最长公共子序列(LCS)、背包问题、最短路径(Floyd-Warshall)
贪心算法 每一步选择「局部最优解」,最终逼近全局最优解(需满足贪心选择性质) 哈夫曼编码、最小生成树(Prim/Kruskal)、活动选择问题
分治算法 将问题分解为「独立子问题」,递归求解后合并结果 归并排序、快速排序、大数乘法(Karatsuba)
回溯算法 按「深度优先」尝试所有可能解,不满足条件时回溯(暴力搜索的优化) 全排列、组合总和、N皇后问题、子集问题
字符串算法 处理字符串匹配、编辑、转换等问题 KMP算法、BM算法、Rabin-Karp算法、字符串编辑距离
图算法 处理图的遍历、连通性、路径、生成树等问题 拓扑排序、并查集(Union-Find)、最小生成树、最短路径
2. 按时间复杂度分类(效率等级)
复杂度级别 名称 特点(n为数据规模) 典型算法
O(1) 常数时间算法 效率最高,与n无关 哈希表查找/插入、数组随机访问
O(logn) 对数时间算法 效率极高,n增大时增长缓慢 二分查找、红黑树插入/查找
O(n) 线性时间算法 效率较高,与n成正比 线性查找、计数排序、BFS(图节点遍历)
O(nlogn) 线性对数时间算法 高效排序的主流复杂度 快速排序、归并排序、堆排序
O(n²) 平方时间算法 效率一般,n较大时性能下降 冒泡排序、插入排序、简单回溯
O(2ⁿ) / O(n!) 指数/阶乘时间算法 效率极低,仅适用于小规模数据 暴力全排列、TSP问题(暴力解)
3. 按空间复杂度分类(内存开销)
类别 特点 典型算法
原地算法(O(1)空间) 仅使用常数额外空间,不依赖额外数据结构 冒泡排序、插入排序、堆排序(in-place实现)
线性空间算法(O(n)) 需额外使用与n成正比的空间 归并排序、线性表复制、BFS(队列存储节点)
递归空间算法(O(logn)~O(n)) 递归调用栈占用空间(与递归深度相关) 快速排序(递归栈O(logn))、DFS(递归栈O(n))

三、核心关联:数据结构与算法的绑定关系

很多算法是为特定数据结构设计的,二者不可分割:

  • 数组/链表 → 线性查找、冒泡排序、插入排序
  • 二叉搜索树/红黑树 → 二叉查找、中序遍历排序
  • 哈希表 → 哈希查找、哈希集合操作
  • 图 → DFS/BFS、Dijkstra算法、并查集
  • 堆 → 堆排序、优先队列(TopK问题)
  • 字符串 → KMP、Rabin-Karp匹配算法

总结

  • 数据结构的核心是「组织数据」,分类围绕「逻辑关联、物理存储、功能场景」;
  • 算法的核心是「解决问题」,分类围绕「优化目标、效率等级、解题思路」;
  • 工程实践中,需根据问题场景选择「适配的数据结构+高效的算法」(如:快速查找用哈希表,有序查找用二叉搜索树,大规模排序用归并/堆排序)。
相关推荐
M K Q1 小时前
2025.9 GESP三级 日历制作
算法
AI小云1 小时前
【数据操作与可视化】Pandas数据处理-Series数据结构
开发语言·数据结构·python·numpy·pandas
x***J3481 小时前
算法竞赛训练方法
算法
前端小L1 小时前
图论专题(十六):“依赖”的死结——用拓扑排序攻克「课程表」
数据结构·算法·深度优先·图论·宽度优先
前端小L1 小时前
图论专题(十三):“边界”的救赎——逆向思维解救「被围绕的区域」
数据结构·算法·深度优先·图论
风筝在晴天搁浅1 小时前
代码随想录 738.单调递增的数字
数据结构·算法
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 108: 01背包
数据结构·算法·leetcode·深度优先·动态规划
大千AI助手2 小时前
平衡二叉树:机器学习中高效数据组织的基石
数据结构·人工智能·机器学习·二叉树·大模型·平衡二叉树·大千ai助手
九年义务漏网鲨鱼2 小时前
【多模态大模型面经】现代大模型架构(一): 组注意力机制(GQA)和 RMSNorm
人工智能·深度学习·算法·架构·大模型·强化学习