首页 / 知识库 / 进大厂必备计算机基础 / 数据结构与算法

13 - 遇到问题该选哪种数据结构

最后一章,我们不学新东西,而是把前面所有数据结构收进一张「决策地图」。这一章的目标很实在:下次遇到一个实际问题,你脑子里能立刻浮现出「这该用哪个」。 这正是第 01 章说的「选型思维」,也是这整篇教程的落点。

先回到那个核心问题

选数据结构,永远从这一句开始问:

「我最频繁做的是什么操作?我最怕哪个操作慢?」

想清楚这个,答案基本就出来了。下面这张表,就是按「你想干什么」来倒查该用什么。

按需求查结构(决策速查表)

你想干的事首选结构为什么
按位置/下标快速读取,数据量稳定数组按下标 O(1) 一步到位
频繁在中间插入/删除链表改指针即可,不用挪动大批数据
根据唯一标识(键)秒查对应值哈希表O(1) 查找,最快
判断某个东西”见过没” / 去重哈希表存进去,查在不在,都是 O(1)
统计次数 / 建立映射关系哈希表键→值天然契合
最近做的要最先撤销 / 处理嵌套后进先出
按到达顺序公平处理任务队列先进先出
反复取出”当前最大/最小”取最值 O(1),插入 O(log n)
要有序,还要范围查询/找最值平衡树O(log n) 且天然有序
海量数据存硬盘、做索引B+ 树矮胖多叉,少读硬盘
表达层级/归属关系天生的层级模型
表达”谁和谁有关系”的网状结构顶点+边,最灵活
找最短路径/最少步数图 + BFS一圈圈扩,先到即最短
探索所有可能/连通性/依赖顺序图 + DFS一条路走到黑再回头

几个「一句话触发词」

面试或实战中,听到这些词,脑子里该立刻蹦出对应结构:

  • 听到「秒查、去重、缓存、键值、统计次数」→ 哈希表
  • 听到「撤销、括号匹配、函数调用、后开先关」→
  • 听到「排队、按顺序、缓冲、先来先服务」→ 队列
  • 听到「Top K、优先级、每次取最值、定时任务」→
  • 听到「有序、范围查询、数据库索引」→ 平衡树 / B+ 树
  • 听到「层级、目录、组织架构、DOM」→
  • 听到「关系、网络、路径、好友推荐、导航、依赖」→

别忘了它们之间是有联系的

这篇教程一路走来,你应该感受到:这些数据结构不是孤立的,而是层层递进、互相支撑的:

  • 数组和链表是最底层的两块砖,栈、队列、哈希表、树都建立在它们之上。
  • 栈和队列看似简单,却是**图遍历(DFS/BFS)**的引擎。
  • 二叉搜索树为了不长歪进化出平衡树,为了适配硬盘进化出 B+ 树
  • 填了优先级队列的坑。
  • 放宽限制(允许环、多连接)就成了
  • 而「缓存 / 分层 / 局部性」这些思想,又和你在组成原理、操作系统篇学的一脉相承。

记住:数据结构的世界,是一张互相关联的网,不是一堆孤立的名词。理解了「谁为解决谁的问题而生」,你就不用死记,而是能推导出来。

最后给你的建议

  • 别急着刷题。先把这 13 章的「每种结构擅长什么、代价是什么」真正想透,遇到问题能选对工具,比会背 100 道题的模板更有用。
  • 动手时用现成的。实际写代码时,哈希表用语言自带的字典、有序结构用自带的 TreeMap/set,你几乎不用自己从零实现——理解原理是为了会选、会判断性能,而不是重复造轮子。
  • 等你真要刷题时,回头再看这篇,你会发现每道题的第一步——「这题该用什么数据结构」——已经难不倒你了。

恭喜你学完了

回顾这一路:

  • 开篇:数据结构是组织数据的方式,选型看操作(01);大 O 衡量快慢(02)。
  • 线性结构:数组 vs 链表(03)、栈(04)、队列(05)、哈希表(06)。
  • 树形结构:树(07)、二叉搜索树(08)、平衡树与 B+ 树(09)、堆(10)。
  • 图结构:图(11)、存储与遍历 BFS/DFS(12)。

如果你还没看过 计算机操作系统原理 和 计算机组成原理,推荐一并看完——三篇合起来,你的计算机基础认知地图就完整了。


回到 README 目录 | 回到 总目录