第二篇 数据结构
2010 年计算机统考大纲完全解析系列共由五篇构成,在第一篇中,我们在第一时间着重对整个考试的性质,考查目标,新大纲的变化以及相应的备考策略做了介绍。在接下来的四篇中,我们将分别详细解读大纲所规定的四门课程的考查内容,并给出有针对性的复习提示。
今天我们首先来解析一下计算统考大纲数据结构部分及其相关知识点。数据结构占了 45 分,和计算机组成原理部分同一个比重,在以往各年计算机专业的研究生入学考试中,几乎没有学校不考查数据结构的内容,而且绝大部分考试中,数据结构这一门都占据了重要的地位,这足以体现计算机专业研究生选拔对数据结构课程的要求之重。
2010 年的统考大纲对数据结构的考查目标定位为 理解数据结构的基本概念,掌握数据的逻辑结构、存储结构及其差异,以及各种基本操作的实现;在掌握基本的数据处理原理和方法的基础上,能够对算法进行基本的时间复杂度和空间复杂度的分析;能够选择合适的数据结构和方法进行问题求解,具备采用 C 或 C++ 或 JAVA 语言设计程序与实现算法的能力。这个考查目标与 09 年大纲的考查目标相比,最大的变化出现在“ 具备采用 C 或 C++ 或 JAVA 语言设计程序与实现算法的能力 ”。事实上,这一方面可以认为是针对去年考试中出现的一道与程序设计相关的考题的修正,另一方面,也可以看出研究生入学考试对知识实际应用能力的强调。当然,考生也不必因此而专门复习一遍 C 或 C++ 程序设计,毕竟复习时间有限,而且数据结构要求的重点在于算法设计的能力,而不是编写代码的能力,因此,只要能用类似伪代码的形式把思路表达清楚就行,不用强求写出一个没有任何语法错误的程序。
下面我们来解析一下知识点。
线性表 这一章里面的知识点不多,但要做到深刻理解,能够应用相关知识点解决实际问题。链表上插入、删除节点时的指针操作是选择题的一个常考点,诸如双向链表等一些相对复杂的链表上的操作也是可以出现在综合应用题当中的。
栈、队列和数组 可以考查的知识点相比链表来说要多一些。最基本的,是栈与队列 FILO 和 FIFO 的特点。比如针对栈 FILO 的特点,进栈出栈序列的问题常出现在选择题中。其次,是栈和队列的顺序和链式存储结构,这里一个常考点是不同存储结构下栈顶指针、队首指针以及队尾指针的操作,特别是循环队列判满和判空的 2 种判断方法。再次,是特殊矩阵的压缩存储,这个考点复习的重点可以放在二维矩阵与一维数组相互转换时,下标的计算方法,比如与对角线平行的若干行上数据非零的矩阵存放在一维数组后,各个数据点相应的下标的计算。这一章可能的大题点,在于利用堆栈或队列的特性,将它们作为基础的数据结构,支持实际问题求解算法的设计,例如用栈解决递归问题,用队列解决图的遍历问题等等。
树和二叉树 。这一章中我们从顺序式的数据结构,转向层次式的数据结构,要掌握树、二叉树的各种性质、树和二叉树的不同存储结构、森林、树和二叉树之间的转换、线索化二叉树、二叉树的应用(二叉排序树、平衡二叉树和 Huffman 树),重点要熟练掌握的,是森林、树以及二叉树的前中后三种遍历方式,要能进行相应的算法设计。这一部分是数据结构考题历来的重点和难点,复习时要特别关注。一些常见的选择题考点包括:满二叉树、完全二叉树节点数的计算,由树、二叉树的示意图给出相应的遍历序列,依据二叉树的遍历序列还原二叉树,线索化的实质,计算采用不同的方法线索化后二叉树剩余空指针域的个数,平衡二叉树的定义、性质、建立和四种调整算法以及回溯法相关的问题。常见的综合应用题考点包括:二叉树的遍历算法,遍历基础上针对二叉树的一些统计和操作(比如结点数统计、左右子树对换等等),判断某棵二叉树是否二叉排序树,以上这些都要求能用递归的和非递归的算法解决,特别要重视非递归的算法,线索化后二叉树的遍历算法,如查找某结点线索化后的前驱或后继结点的算法以及给出 Huffman 编码等等。
图 。在这一章中需要识记的是图以及基于图的各种定义,存储方式。要熟练掌握图的深度遍历和广度遍历算法,这是用图来解决应用问题时常用的算法基础。需要掌握基于图的多个算法,能够以手工计算的方式在一个给定的图上执行特定的算法求解问题。常见的应用问题直接给出或经过抽象,会成为下列问题:最小生成树求解( PRIM 算法和 KRUSKAL 算法,两种方法思想都很简单,但要注意不要混淆这两种方法),拓扑排序问题(这里会用到数组实现的链表,可以注意一下),关键路径问题(数据结构的较大难点,要把概念理解透,能做出表格找出关键路径),最短路径问题(有重要的应用背景,也是贪心法不多的能给出最优解的典型问题之一)。
查找 。这一章,需要 识记关键字、主关键字、次关键字的含义;静态查找与动态查找的含义及区别;平均查找长度 ASL 的概念及在各种查找算法中的计算方法和计算结果,特别是一些典型结构的 ASL 值, B- 树的概念和基本操作冲突解决方法的选择和冲突处理过程的描述, B+ 树的概念(新增考点) ,特别要注意 B- 树和 B+ 树概念的对比,以及 Hash 表相关的概念。要熟练掌握顺序表、链表、二叉树上的查找方法,特别要注意顺序查找、二分查找的适用条件(比如链表上用二分查找就不合适)和算法复杂度。
内部排序。 内部排序既是重点,又是难点。排序算法众多,光大纲上列出的就有 9 种,各种不同算法还有相应的一些概念定义需要记住。选择题常见的问题包括:不同排序算法的复杂度,给定数列要求给出某种特定排序方法运行一轮后的排序结果,或者给出初始数列和一轮排序结果要求选择采用的排序算法,给定时间、空间复杂度要求以及数列特征要求选择合适的排序算法等等。如果排序这一考点出现在综合应用题中则常与数组结合来考查。
另外需要提醒考生注意的是,大纲中的考查目标中提到的算法的复杂度分析,而具体考点中没有明确列出,因此需要大家学习参考书中关于算法复杂度分析的相关内容,以及注意相关章节中提到的一些典型算法的算法复杂度。
参考书建议大家用清华严蔚民版的,有助于建立知识体系,并且讲的比较通透。数据结构的复习要紧扣参考书,把书认真看几遍,深入理解大纲相关的知识点。
小编推荐:考研分数线
小编推荐:考研专业
小编推荐:考研答案
考研大纲汇总 | 考研英语大纲 | 考研政治大纲 | 考研数学大纲 | 考研专业课大纲 |