学习数据结构与算法,首先要回答两个问题:数据应该怎样组织和表示?怎样评价一种解法的效率与资源代价? 本章围绕这两个问题建立后续课程共用的术语与分析方法。
本章定位
本章面向已经会写基本 C++ 结构体、数组、循环和函数的读者。先跟随学生名单的需求变化,理解逻辑关系、存储方式和操作契约;再从小样例计数出发,学习比较算法的时间与空间成本。对数、求和与简单递归会结合执行过程介绍,无须先学主定理。
学习目标
完成本章后,你应该能够:
- 区分数据元素、逻辑结构、存储结构和抽象数据类型;
- 根据问题需要描述一组数据应支持的基本操作;
- 为简单算法确定输入规模并计算基本操作次数;
- 区分时间复杂度、辅助空间复杂度以及最好、最坏和平均情况;
- 用清楚的前提和推导比较两种实现方案。
三篇文章如何分工
| 学习问题 | 对应文章 | 完成后的可检查能力 |
|---|---|---|
| 数据应该怎样组织和表示? | 0.1 数据结构基础概念 | 能从逻辑关系、存储方式和基本操作描述一个数据组织方案 |
| 怎样评价算法的效率与资源代价? | 0.2 时间与空间复杂度概论 | 能说明输入规模,推导简单代码的时间与辅助空间复杂度 |
| 怎样从内存布局理解操作代价? | 0.3 从内存视角理解复杂度 | 能说明缓存行与内存布局如何影响单次操作的代价 |
推荐学习顺序
- 阅读数据结构基础概念,沿“保存记录 → 位置访问 → 插入 → 按学号查找/删除 → 多种需求”分析方案。
- 阅读时间与空间复杂度概论,先完成三角循环示范,再补全几何步长推导,最后独立分析累计停止条件;在文中指定位置穿插操作计数实验与选择题。
- 用多次区间求和练习“准备成本 + 重复成本”,用简单递归区分调用总数与峰值空间。
- 然后阅读从内存视角理解复杂度,讨论渐近模型之外的硬件访问成本。主定理与更一般的递推留到第 12 章。
配套 Labs
- Lab 00-T-01:制作个人 DSA 学习地图
- Lab 00-E-01:用操作计数观察增长趋势
- Lab 00-T-02:复杂度计算自测:19 题按正文主题分组完成,高级递推题可延后。
学习建议
从解释走向验证
每学习一个概念,先尝试不用原文解释它,再用小例子、代码或实验检查解释是否成立。建议沿着“阅读 → 理解 → 实现 → 测试 → 复盘”的顺序完成本章。
准备好后,从0.1 数据结构基础概念开始。