912数据结构教材_怎样科学复习考研数据结构

多年以后,面对考卷,你将会回想起,教授带你去见识数据结构的那个遥远的下午。

数据结构是计算机最重要的专业课,只要还在干这行就逃不掉数据结构的学习和应用。这门课在统考中占到了45分(满分150分),然而这一门课又像毕加索一样抽象,对跨考的同学非常不友好,因此今天就来谈谈数据结构的复习。(本文前边废话较多,不想看的同学可以直接拉到最后一部分:怎样看书。)

知彼知己者,百战不殆;不知彼而知己,一胜一负;不知彼,不知己,每战必殆。所以我们先来看一下计算机统考大纲的数据结构部分(自命题高校出题范围也多与统考类似)。

01 线性表

(一)线性表的定义和基本操作

(二)线性表的实现

1.顺序存储

2.链式存储

3.线性表的应用

02 栈、队列和数组

(一)栈和队列的基本概念

(二)栈和队列的顺序存储结构

(三)栈和队列的链式存储结构

(四)栈和队列的应用

(五)特殊矩阵的压缩存储

03 树与二叉树

(一)树的基本概念

(二)二叉树

1.二叉树的定义及其主要特征

2.二叉树的顺序存储结构和链式存储结构

3.二叉树的遍历

4.线索二叉树的基本概念和构造

(三)树、森林

1.树的存储结构

2.森林与二叉树的转换

3.树和森林的遍历

(四)树与二叉树的应用

1.二叉排序树

2.平衡二叉树

3.哈夫曼(Huffman)树和哈夫曼编码

04 图

(一)图的基本概念

(二)图的存储及基本操作

1.邻接矩阵法

2.邻接表法

3.邻接多重表、十字链表

(三)图的遍历

1.深度优先搜索

2.广度优先搜索

(四)图的基本应用

1.最小(代价)生成树

2.最短路径

3.拓扑排序

4.关键路径

05 查找

(一)查找的基本概念

(二)顺序查找法

(三)分块查找法

(四)折半查找法

(五)B树及其基本操作、B+树的基本概念

(六)散列(Hash)表

(七)字符串模式匹配

(八)查找算法的分析及应用

06 排序

(一)排序的基本概念

(二)插入排序

1.直接插入排序

2.折半插入排序

(三)气泡排序(bubble sort)

(四)简单选择排序

(五)希尔排序(shell sort)

(六)快速排序

(七)堆排序

(八)二路归并排序(merge sort)

(九)基数排序

(十)外部排序

(十一)各种内部排序算法的比较

(十二)排序算法的应用

推荐书目

1、《数据结构(C语言版)》 严蔚敏

这一版的数据结构应当是大家看得最多的,但是其中的代码介于C和伪码之间。

912数据结构教材_怎样科学复习考研数据结构_第1张图片

2、《算法与数据结构 C语言描述》 张乃孝

这一版的编程语言比较规范,但是看得人比较少。个人而言更喜欢这一本。

912数据结构教材_怎样科学复习考研数据结构_第2张图片

3、王道系列

912数据结构教材_怎样科学复习考研数据结构_第3张图片

4、天勤系列

912数据结构教材_怎样科学复习考研数据结构_第4张图片

王道和天勤是计算机考研最主流的教辅,天勤更适合跨考。另外教辅毕竟只是辅,不可替代教材。

5、《算法与数据结构考研试题精析》

俗称数据结构1800(不是汤家凤那个1800),目前已经出到第三版,不推荐买第二版,第二版很多题目的语言用的是pascal,这种语言现在考研基本不出现。

这本书的题目比较全面,包含很多学校的真题,如果把这本书的题目都做会了,数据结构考研问题就不大了。建议先从选择开始重点突破,解答题根据报考学校出题情况选择性练习。

912数据结构教材_怎样科学复习考研数据结构_第5张图片

学习视频

1、清华大学 邓俊辉

2、浙江大学 陈越

以上两位老师的数据结构视频在b站就可以找到。

语言基础

统考大纲要求c或者c++,部分院校还可以选用java。以c语言为例说下至少应该掌握哪些知识点。为了方便演示,在此以谭浩强教授第三版的《C程序设计》为例。其目录如下:

  1. C语言概述
  2. 程序的灵魂-算法
  3. 数据类型,运算符与表达式
  4. 最简单的程序设计——顺序程序设计
  5. 选择结构程序设计
  6. 循环控制
  7. 数组
  8. 函数
  9. 预处理指令
  10. 指针
  11. 结构体和共用体
  12. 位运算
  13. 文件
  14. 常见错误和程序调试

仅仅从数据结构应试的角度看,3-9章,10-12章(不看共用体)是需要看的。如果是纯碎零基础没写过代码那么前两章也要看看。其中最难理解的也是最重要的是第10章指针,新手需要理解一段时间。学完这些至少保证考试涉及到的代码能看懂,考试必备的算法涉及的语法基本会用。大多数院校或者统考不会涉及太高端的语法操作。

时间充裕的话可以自己上机敲代码试试,尤其是一些女童鞋,不要害怕敲代码,电脑不会吃人,拿出你们怼男朋友的气势来写代码。但是如果出了bug请你们反思自己而不是质疑编译器是不是不爱你了。

如果你是纯零基础或者不怎么写代码还是建议花上几天时间学一下c语言,不然会很痛苦,至于教材不一定用谭老师这本。如果你是写代码比较多的,有一些基础的就当我没说。

怎样看书和做题

01熟悉概念

这里的概念包括一些数据结构的概念以及算法的流程。很多概念的描述不是一时半会能理解的,没关系第一次看不要求深刻理解,先有个印象,然后进行实际操作,比如链表插入删除画图,二叉树遍历画图,手动排序等等,通过实际操作加深理解概念。在这一步不要过于纠结抽象的问题,也不要纠结代码,把这些工作当成乐高玩具就好。

02熟悉代码

熟悉了操作题目后就可以逐渐抄袭,模仿书上的示例代码,由于严蔚敏版的教材代码过于……,在这里可以学习下王道天勤的代码。下列基础代码一定要掌握,各类算法题以及选择都可以在从这里衍生:

  1. 链表的插入删除。算法题一般是单链表,选择题还会涉及到双链表循环链 表。
  2. 队列和栈的出入函数。考试中通常是可以直接使用栈或者队列,除非明确 要求你实现一个队列或者栈。(作者在面试中遇到过这个题)。相对而言这一章的代码比较简单。
  3. 数组的基本操作。包括数组的遍历,插入删除。
    二叉树的遍历。包括前中后层序。其中前中层序都比较简单,后序需要多花点精力。这部分代码的递归形式和非递归都要学会。链表和二叉树是最可能出现算法题的地方。
    图的DFS和BFS。这是两种最基本的遍历方式,在此基础上可以出一些题目,比如北邮考过判断一个图是不是有环路。如果学的好的同学会发现二叉树遍历和图的遍历存在一些相关性。
    查找。主要是二分查找,二分查找原理简单但是写的时候注意边界问题。
    各类排序算法。各类排序算法的代码都要会,还要掌握各类排序算法的时间复杂度空间复杂度。

以上代码一定要经常练习,反复练习,不要只背下来还有理解其原理,知道为什么这样写。

03做习题

关于习题的选择我优先推荐1800.这本书的题目比较全面,包含了很多学校的真题,优先做选择,时间充裕再做填空和解答题。如果时间不够可以只做王道或者天勤的题目。

习题中最令人棘手的当属算法设计题目,很多写代码少的同学感觉并没有思路。算法设计题目主要是两个问题,第一想不出算法或者想不出最优算法,第二想出来算法不会实现。

为了解决这两个问题,我们先来看看历年考了什么(题目和答案细节请参考你们买的书):

2017年:将二叉树转化为中缀表达式。解析:这个题目显然是在中序遍历基础上稍作修改。

2016年:n个正整数组成的集合A,将A划分成两个不相交的子集A1和A2,元素个数分别是n1和n2,A1和A2的元素之和分别为S1,S2设计个算法满足|n1-n2|最小且|S1-S2|最大。解析:最朴素的思想是把最小的一半元素放在A1中其余的放在A2中,也就是对A进行划分,显然是在快排基础上做修改。

2015年:对于单链表中绝对值相等的节点只保留一个,链表长度m,节点绝对值<=n。解:用数组记录出现过的节点值,遇到重复就删除,这个题可以暴力破解。

2014年:计算二叉树叶节点带权路径长度之和。解:遍历就可以解决。

2013年:找主元素。解:想不出最优解可以暴力破解。

可以看到算法题主要集中在数组,链表和二叉树。如果是链表或者二叉树比较容易想到算法或者暴力算法。如果是数组的题目,最优算法还是存在一定难度,有些时候需要暴力破解。但是很多算法题目可以在教材中找到参考,而非给你个比较难的没有边际的题目,也不至于说考你设计个DP,Greedy,FSM之类的在LeetCode中都有可能是Hard的题目。因此还是要熟练掌握书上的算法,并多多研究各种习题的算法解答,最开始想不到没关系,一点一点学习模仿,不要想着有什么万能的办法可以速成算法题,这种题目不是一朝一夕可以成的,需要不断练习摸索 。

最后欢迎关注我们的公众号:计算机研究僧以及知乎专栏:计算机研究僧。

你可能感兴趣的:(912数据结构教材,严蔚敏数据结构查找的基本操作)