数据结构
数据结构在 408 试卷中占据 45 分,和计算机组成原理一样,是分数占比最大的科目,包含 11 道选择题以及两道大题。大题包含算法设计题和概念问答题,算法设计题可能是基于线性表、树或图的某个问题,让你设计算法并且给出时间和空间复杂度的分析,选择题也会均匀地涉及到各个章节的内容。
这门课理解性的内容居多,在知识掌握牢固的情况下不容易遗忘,建议大家优先复习。在复习的过程中可以与实践结合,可以去用代码实现一下一些算法和数据结构,这样可以对知识点的理解更加深刻。总的来说,数据结构中各个板块的内容都比较重要,建议大家将这些内容都理解透彻。
数据结构的考察目标包含如下内容(来自 408 考研大纲):
- 掌握数据结构的基本概念、基本原理和基本方法。
- 掌握数据的逻辑结构、存储结构及基本操作的实现,能够对算法进行基本的时间复杂度和空间复杂度的分析。
- 能够运用数据结构的基本原理和方法进行问题的分析与求解,具备采用 C 和 C++ 语言设计与算法实现算法的能力。
通用解题路径
面对一道数据结构题,可以按“对象—结构—操作—证明”四步拆开:先找出数据对象、输入和输出;再选择能够表达关系的逻辑结构及具体存储方式;随后写出访问、插入、删除或遍历的关键步骤;最后说明不变量、边界条件以及时间和空间复杂度。这样既适用于选择题中的概念辨析,也适用于算法设计题。
- 对象与约束:元素是否有固定次序、层级、网状关系,是否要求随机访问或按优先级取元素?
- 结构与表示:同一个线性表可选择顺序表或链表;同一个图可选择邻接矩阵或邻接表。选择依据是操作代价,而不是名称相似。
- 操作与不变量:明确循环中哪些部分已经有序、已访问或已建立链接;空表、首尾元素、重复关键字和不连通情形都要单独检查。
- 复杂度与尺度:区分一次基本操作、最坏/平均情况和辅助空间;不能只根据代码嵌套层数机械判断复杂度。
学习目录
绪论
本章在考研中一般不直接考察,需要了解时间复杂度和空间复杂度的概念,并对算法进行相关分析。
线性表
本章是后续内容的基础,可能会涉及选择题中的概念考察。此外,需要能够手写代码实现基于数组或链表的相关操作。
线性数据结构
本章以选择题形式考察,需要熟练掌握栈和队列的操作以及应用,另外还需要了解如何用数组实现栈和队列,可能会在代码题中考察。
字符串
本章可能在选择题中出现,掌握 KMP 算法的思想,能够手工模拟 KMP 过程即可。
树与二叉树
本章在选择题中考察,需熟练掌握树的各种概念,并且能够手工模拟基于树的各种算法流程。
图
本章在选择题中考察,也有可能作为一道概念题在大题中出现,需要熟练掌握图的存储结构(代码实现),并且要求在概念上理解图的应用,要求能够手工模拟。
查找
本章在选择题中考察,重点理解折半查找的思想以及散列表查找的冲突处理方法。
排序
本章在选择题中会考察,在大题中也可能会基于本章的排序算法思想出一道相关的代码题。需要熟练掌握各个排序算法的过程,并且能够手写快速排序的代码。