Skip to content

为什么先做学习准备

学习本节后,你需要先建立一个基本判断:数据结构不是一组孤立的名词,而是一种组织数据、分析问题、选择方案的能力。

很多初学者一开始学习数据结构时,会直接背数组、链表、栈、队列、树、图的定义。这种方式短期内看起来进度很快,但很容易出现一个问题:定义记住了,题目还是不会做;代码看懂了,换个场景还是不知道该选什么结构。

本节的目标不是立刻掌握某个具体结构,而是先知道接下来应该用什么方式学习。


数据结构确实会涉及很多容器,比如数组、链表、栈、队列、哈希表、树、图。但如果只把它们当成一串名称去记忆,学习效果会很差。

更准确地说,数据结构研究的是三个问题:

  • 数据之间有什么关系。
  • 数据应该如何存放。
  • 数据应该如何被高效访问和修改。

例如,一组学生成绩可以直接放在列表里。如果只是按顺序打印成绩,普通列表就足够了。但如果经常要根据学号快速查找某个学生,哈希表可能更合适。如果要经常查询成绩排名,可能还需要考虑有序结构。

同一批数据,在不同任务下可能需要完全不同的组织方式。这就是数据结构真正要解决的问题。


只背代码的问题在于:代码只是某个思想的结果,不是思想本身。

同样是“查找一个元素”,代码可以写得很短,但学习重点不在于语法有多熟,而在于它采用了什么查找策略、适合什么规模、最坏情况下需要付出多少代价。

如果一个列表里只有 10 个元素,从头到尾检查通常没有问题。但如果列表里有 100 万个元素,而且查找操作非常频繁,原来“能跑”的写法就可能变成瓶颈。

因此,学习数据结构时要追问:这段代码背后采用了什么数据组织方式?它适合什么规模?它的代价在哪里?有没有更合适的结构?


学习准备不是额外负担,而是为了减少后续学习中的混乱。

当你提前知道“数据结构关注的是数据关系和操作代价”之后,再学习链表时,就不会只问“链表代码怎么写”,而会问“链表为什么插入删除方便,但随机访问不方便”。

当你提前知道“不同结构适合不同场景”之后,再学习栈和队列时,就不会把它们看成普通列表的变体,而会理解它们为什么能表达撤销、回退、排队、层序遍历等过程。

当你提前知道“代码只是结构思想的落地”之后,再学习树和图时,就不会被指针、引用、递归和邻接表吓住,而会先抓住数据关系本身。


学习数据结构之前,最重要的准备不是多背几个定义,而是建立正确视角。

数据结构的核心问题是:如何根据数据关系和操作需求,选择更合适的数据组织方式。后续每学习一种结构,都应该同时关注它的使用场景、操作特点、性能代价和实现方式。