ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

哈工大数据结构期末复习指南:核心考点与算法设计全解析

2026/9/16 7:36:19 拓冰建站 浏览量
哈工大数据结构期末复习指南:核心考点与算法设计全解析 每年到了期末季总有一批考生被“哈工大数据结构”这几个字吓得寝食难安。我当初备考的时候也这样四处找题、刷题、问学长总觉得这份试卷藏着什么不为人知的秘密。后来真上了考场才发现哈工大的数据结构期末试题从来不玩偏门它考的全是你“以为自己会、其实没真会”的基础功。这篇内容我就以2021年秋季学期这份试题为引子把数据结构期末的核心考点、典型题型和复习路径整个拆一遍。不管你是哈工大本校生还是用严蔚敏C语言版教材自学的考研党亦或是想靠数据结构面试过关的求职者都可以拿这份拆解当参考。数据结构这门课说到底是研究“数据怎么组织、算法怎么跑”的学问。期末考的就是你有没有真正理解线性表、树、图、查找、排序这五大板块并能在限定时间内写出正确的代码。别指望考前突击两天就能搞定但如果你按照下面这套思路去复盘把每一类题型的套路吃透及格绝对不难冲高分也有希望。1. 试题整体概况与出题风格分析1.1 哈工大出题风格不玩偏怪专打基础先说一个很多人误解的地方哈工大期末题不像竞赛题它不追求“偏、难、怪”而是追求“你看过就会没看过就只能瞎编”。2021年秋季学期这份试题延续了哈工大一贯的稳健风格基本覆盖了教学大纲里的所有核心模块但每题都能在课本和课件里找到原型。我复盘过很多份哈工大的数据结构试卷整体感觉是基础题占六成中等题占三成拔高题占一成。基础题就是概念辨析、复杂度计算、遍历结果推演这类只要你平时听课做实验基本送分。中等题集中在算法设计比如链表逆置、二叉树层次遍历、图的最短路径要求你写出可运行的思路或核心代码。拔高题通常是综合性应用题比如“设计一个数据结构支持某类操作”需要你灵活组合学过的知识。所以备考哈工大数据结构方向比努力更重要。别把时间浪费在啃那些偏门的红黑树细节上把教科书课后题和历年真题吃透比你做十套模拟题都管用。2021年这份卷子的价值就在于它清晰地画出了老师的出题边界凡是大纲里反复强调的都是要考的。1.2 知识点覆盖与分值分布推算根据我对2021年秋季学期试题的记忆和同类试卷的对比大致可以把分值分布推算成下面这张表。当然每年会有些微调但大格局基本不变。知识模块常见题型估算分值占比核心考查能力线性表顺序表、链表选择、算法设计15%-20%指针操作、插入删除逻辑栈与队列选择、简答、应用10%-15%先进后出/先进先出特性、表达式求值树与二叉树选择、简答、算法设计20%-25%递归遍历、性质推导、建树图简答、综合应用15%-20%存储结构、遍历、最短路径、最小生成树查找选择、简答、算法设计10%-15%二分查找、二叉排序树、哈希表排序选择、简答、模拟10%-15%各类排序过程、复杂度、稳定性看到没有树和图加起来占了将近一半。这两个模块是数据结构的灵魂也是期末复习的重灾区。很多人链表玩得溜一到二叉树就懵原因在于没有真正理解递归。后面我会专门讲这个坎怎么过。2. 核心考点深度解构从链表到图的层层递进2.1 线性表与链表指针操作是基本功线性表是数据结构的开篇大戏期末考试对这块的考查几乎从不缺席。顺序表比较简单考的无非是插入删除时元素的移动次数以及动态扩容的复杂度分析。真正拉开差距的是链表尤其是单链表的各种操作。2021年这份试题里链表相关题目主要集中在单链表逆置、有序链表合并、删除链表中倒数第N个节点、判断链表是否有环。这些题目听起来不难但考的是你能不能在不借助辅助数组的情况下用几个指针把事干完。比如单链表逆置核心就是三指针法pre、cur、next三个指针配合边遍历边改指向。我当年在考场上写这个题的时候就有个小教训——忘记在改指向之前保存next节点结果链表直接断掉后面的节点全丢了。这种错误平时写代码不报错考试时一紧张就容易犯。另一个高频考点是链表和顺序表的对比。老师喜欢让你从时间复杂度和空间复杂度两个维度分析“为什么链表插入快但访问慢”“为什么顺序表适合随机访问”。这种题看起来简单但回答时如果不提缓存局部性、存储密度这些细节就容易被扣分。还有一个容易忽略的点头结点。带头结点的链表和不带头结点的链表在插入和删除操作的代码写法上差别很大。复习时一定要把这两种写法都练熟不然考场上临时推逻辑很容易出错。2.2 栈与队列别只会背定义栈和队列这部分概念题大家都觉得简单但一到应用题就暴露了。2021年秋季学期试题里栈相关题目考了括号匹配和表达式求值队列相关题目考了循环队列和层次遍历。括号匹配是栈的经典应用思路很简单遇到左括号就入栈遇到右括号就检查栈顶是否匹配匹配则出栈不匹配则报错。这个算法写起来不到二十行但有几个边界条件容易忘字符串遍历完了栈不为空说明左括号多了栈为空时遇到右括号说明右括号多了。这两个细节就是改卷时的得分点。表达式求值是栈的进阶应用分为中缀转后缀、后缀求值两步。哈工大的考题一般会让你手动模拟整个过程比如给出一个中缀表达式写出它的后缀形式然后画出栈的变化过程。这种题考的是对原理的理解而不是代码能力。复习时一定要亲手画几遍栈的变化图把运算符优先级和括号处理的顺序彻底搞清楚。循环队列是队列这边的重中之重。空队、满队的判断条件——front rear表示空队(rear 1) % MAXSIZE front表示满队——是期末必考的选择题或填空题。很多人不理解为什么要牺牲一个存储单元其实就是因为如果不这样空队和满队的状态就无法区分了。2.3 树与二叉树递归思维的集中营树是数据结构期末的“半壁江山”而二叉树又是树的重心。2021年这份试题在二叉树部分出了好几道题包括已知前序和中序遍历序列重建二叉树求二叉树的深度判断一棵树是否为平衡二叉树层次遍历二叉树。先说说已知前序中序重建二叉树。这道题的解法完全建立在递归思想上前序序列的第一个元素一定是根节点在中序序列中找到这个根节点它左边是左子树的中序序列右边是右子树的中序序列然后递归处理。我在复习时发现很多同学对“递归区间”的边界划分搞不清楚写出来的代码总差一两个下标。解决这个问题没有捷径就是多画图把每一次递归的区间都用笔标出来画个四五遍就通了。求二叉树深度可以说是数据结构里最简单的递归题但也是最容易写错的。核心代码就三行左子树深度和右子树深度取较大值再加一。但很多人一开始想不到递归出口或者直接把左右子树都遍历了一遍而不是取最大值。这种题在试卷上出现考的其实不是你能不能写出来而是你的递归思维有没有真正建立起来。层次遍历用队列实现这个知识点把队列和树结合了起来。思路是根节点入队然后循环——出队一个节点访问它把它的左右孩子依次入队。这个过程如果理解了后面图的广度优先搜索也就顺理成章了。树的性质题也是期末的常客。比如“一棵完全二叉树有n个节点求叶子节点个数”“度为2的节点和度为0的节点有什么关系”。这类题除了记住公式更重要的是理解推导过程因为考试时老师很可能换一个问法比如给你叶子节点数让你反推总节点数。2.4 图存储与遍历二选一必考图的题目在期末试卷里占分不小而且几乎必然出现在大题里。2021年这道试题图的部分考了邻接表存储、深度优先搜索和最小生成树。图的存储结构有两种邻接矩阵和邻接表。期末常考的是给你一张图让你画出它的邻接矩阵或邻接表然后写出从某个顶点出发的深度优先和广度优先遍历序列。这种题没有任何技巧就是按定义一步步来。但要注意图的遍历序列不唯一——深度优先依赖于邻接表中边节点的排列顺序广度优先依赖于队列的入队顺序。所以考试时如果发现自己和同学写的序列不一样先别慌看看是不是顺序问题而不是错误问题。深度优先搜索用递归或栈实现广度优先搜索用队列实现。这两个算法是所有图算法的基础——拓扑排序、最短路径、连通分量判断全都建立在它们之上。复习时要把这两种遍历的代码背到能默写的程度因为期末大题很喜欢让你“写出从顶点V出发的深度优先遍历算法”这种题不给代码白丢分。最小生成树是图的经典应用题主要考Prim算法和Kruskal算法。期末一般会让你手动模拟过程画出每一步选择的边。Prim算法的核心是“从已选顶点集合出发找权值最小的边连接未选顶点”Kruskal算法则是“每次选权值最小的边只要不形成环就加入”。这两种算法的区别要搞清楚尤其是Kruskal如何判断是否形成环——用并查集。2.5 查找与排序复杂度分析是重头戏查找和排序在数据结构里属于“看起来容易、拿分难”的模块。因为代码实现并不复杂但考试更偏向让你分析复杂度、判断稳定性、模拟执行过程。查找部分二分查找是必考。给定一个有序数组让你写出二分查找的判定树或者算一下查找成功和失败的平均查找长度。这里有个细节二分查找的前提是顺序存储且有序链式存储没法直接二分因为无法随机访问。这个点经常以判断题形式出现很多人一粗心就错了。二叉排序树是查找模块的重点。它的性质很简单左子树所有节点值小于根节点右子树所有节点值大于根节点。期末常考的题型是给定一串关键字画出构造二叉排序树的过程或者让你分析最坏情况下二叉排序树的查找复杂度。最后这个点很多人会答错——最坏情况下二叉排序树退化成单链表时间复杂度是O(n)而不是O(logn)。记住这个“退化”思想很多题都能答对。哈希表最近几年出镜率越来越高。2021年试题里就有一道哈希表的题给了哈希函数和冲突处理方法链地址法或线性探测法让你计算平均查找长度。做这种题一定要细心注意“查找成功”和“查找失败”的计算方式完全不同后者要把空位置的比较次数也算进去。排序模块是选择题的重灾区考的是你对各类排序算法的理解深度。快速排序、堆排序、归并排序、直接插入排序、冒泡排序、简单选择排序每一类的平均复杂度、最坏复杂度、稳定性、是否原地排序都要烂熟于心。我整理过一张表复习时直接对照着记效率会高很多。排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n²)O(n²)O(1)稳定直接插入排序O(n²)O(n²)O(1)稳定简单选择排序O(n²)O(n²)O(1)不稳定快速排序O(nlogn)O(n²)O(logn)不稳定堆排序O(nlogn)O(nlogn)O(1)不稳定归并排序O(nlogn)O(nlogn)O(n)稳定除了记这张表还要会手动模拟排序过程。比如给一串数字写出第一趟快速排序后的结果或者画出构建初始堆的过程。这些题目没有技术含量纯粹考你的熟练度所以一定要在考前亲手练几道别只在脑子里过一遍。3. 典型题型还原与解题思路拆解3.1 选择题与填空题概念辨析的易错点选择题和填空题是期末试卷的第一部分也是很多同学丢分的“隐形杀手”。2021年这份试题的客观题部分考察了大量容易混淆的概念我挑几个典型的说说。第一个高频陷阱是“时间复杂度”与“语句频度”的混淆。题目可能会问“以下哪个程序段的时间复杂度为O(n²)”你不仅要知道答案是哪个还要能算出来。比如嵌套循环外层循环n次、内层循环n次总共执行n²次基本操作时间复杂度就是O(n²)。但有些循环的次数是n/2、logn很多人就卡壳了。这里记住一个原则复杂度只看增长趋势常数系数全都不看。logn、n、nlogn、n²、n³、2ⁿ这六个量级期末考来考去就这些。第二个高频陷阱是“栈的应用场景”和“队列的应用场景”的区分。函数调用用栈因为要保存现场、浏览器后退用栈、括号匹配用栈打印机任务排队用队列、进程调度用队列、消息队列用队列。这种题没有技巧就是记但最好结合理解去记而不是死背。第三个陷阱是“稳定排序”的判断。题目会给出一个具体的排序过程让你判断它采用的是哪一种排序算法或者问某个算法是否稳定。比如冒泡排序是稳定的因为相邻交换不会改变相同元素的相对顺序但选择排序是不稳定的比如序列[5, 5, 3]第一趟选最小元素3和第一个5交换两个5的相对顺序就翻转了。这种例子考场上如果能自己推出来就说明你真懂了。3.2 简答与手工模拟题功夫在平时简答题一般不会要你写完整代码而是要你用文字或图示说明某种数据结构或算法的执行过程。2021年试题简答部分出现了画出给定二叉树的先序、中序、后序遍历的访问顺序给出一个图的邻接表表示写出深度优先和广度优先遍历序列模拟直接插入排序对给定序列的每一趟结果。这类题最大的特点是没有捷径全靠平时手工练习。但很多同学在复习时只看书不画图导致考场上要花大量时间推演甚至推错。我的建议是平时复习任何一个遍历算法或排序算法都要亲手画图模拟至少三遍第一遍边看边画第二遍合上书自己画第三遍隔天再画一遍检验记忆。这个过程虽然枯燥但数据库结构的熟练度就是这么来的。以树的遍历为例先序、中序、后序这三种遍历方式本质区别就是访问根节点的时机先序是“根左右”中序是“左根右”后序是“左右根”。很多人死记这三种顺序但遇到一棵复杂的树还是写错。正确的方法是理解递归的本质一棵树的遍历结果其实就是不断拆分成左子树、右子树和根节点的组合。画图的时候用括号把每次递归的子结构标出来出错率就会大大降低。手工模拟排序算法也是一个道理。比如快速排序每一趟做完后数组会被分成“小于基准”和“大于基准”两部分然后在这两部分里分别递归。画模拟过程时一定要把每一趟的基准元素标出来把交换的步骤写清楚这样即使做错了改卷老师也能看到你的思路酌情给分。3.3 算法设计题从暴力解到最优解算法设计题是整张试卷区分度最大的部分也是哈工大期末的压轴戏。2021年试题的算法设计题我记得有设计算法判断一个单链表是否有环设计算法求一棵二叉树的高度设计算法将两个有序链表合并成一个有序链表。这三道题其实都不难至少思路不难。难点在于考场上一紧张代码细节就崩。比如判断链表有环最经典的解法是快慢指针快指针每次走两步慢指针每次走一步如果链表有环它们一定会相遇。这个思路可以一句话讲清楚但落实到代码上你要考虑while循环的条件怎么写——是fast ! NULL fast-next ! NULL还是fast-next ! NULL就可以了边界条件没理清代码就会越写越乱。关于算法设计题的复习策略我有几条经验可以分享。第一条把课后题和考研真题的算法题按类型归类。链表类、树类、图类、排序类各总结出十道左右的典型题把每一道都写到能默写的程度。别贪多重在重复。第二条写代码时先写框架再填细节。先在草稿纸上用伪码把思路写清楚比如“遍历链表找到倒数第k个节点——双指针快指针先走k步然后快慢指针一起走快指针到尾部时慢指针就是目标”。伪码写顺了再翻译成C语言代码出错率会低很多。第三条注意函数的输入输出格式。期末算法题一般会给你一个函数声明比如struct ListNode* reverseList(struct ListNode* head)你要在这个框架下实现功能。平时练习时就要适应这种“填空题式”的代码风格而不是从头到尾自己定义函数。第四条即使写不出完整代码也要写出核心思路和伪码。很多老师是按步骤给分的你写出的“用双指针遍历”可能已经值5分了完全空着才是真正的零分。4. 备考复习路径与实战建议4.1 教材与工具选择严蔚敏C语言版怎么用严蔚敏老师的《数据结构C语言版》是很多高校的指定教材哈工大也不例外。这本书的特点是理论性强、抽象度较高、代码以类C的伪码形式呈现不太适合直接当作“代码模板”来背诵。使用这本书时有几个技巧。第一重点关注每章开头的“逻辑结构”和“存储结构”的说明这是整个章节的“地图”。第二书中的算法大多是以函数或过程的形式给出的复习时要把这些算法在脑内翻译成自己能理解的代码甚至手写一遍。第三每章后面的习题一定要做尤其是算法设计题哪怕只能写出思路也比不做强。除了严蔚敏教材我还推荐搭配一本《王道考研数据结构》。王道的优势是知识点归纳清晰题目覆盖面广而且有很多“应试技巧”性质的总结比如各种排序算法的快速记忆法、图的遍历模板代码。如果你是为考研做准备王道的高分笔记和历年真题分类汇总性价比相当高。另外一个很多人忽略的工具是LeetCode。虽然期末考试的算法题难度整体低于LeetCode中等题但LeetCode上“链表”“二叉树”“栈与队列”三个标签下的简单题非常适合用来培养代码手感。每天刷两三道坚持三周期末写算法设计题的手感会有明显提升。4.2 刷题顺序与时间规划我见过太多人复习数据结构时毫无章法今天看看链表明天翻翻图论后天又回头背排序复杂度。这种“东一榔头西一棒子”的复习方式效率极低因为知识体系是层层递进的线性表没弄懂树就会学得很吃力树没搞定图就更难上手。建议按这个顺序复习线性表→栈与队列→串和数组如果课时覆盖→树与二叉树→图→查找→排序。前四部分是“存储结构和基本操作”后两部分是“典型算法应用”。每一部分都遵循“看书→做课后题→写代码→做真题”四步法而不是只看不动手。时间规划方面如果你是提前一个月开始复习可以这样安排第一周集中攻克线性表和栈队列第二周主攻树和二叉树第三周解决图和查找第四周专攻排序、往年真题和错题回顾。每天至少保证两小时的整块时间用于数据结构碎片时间可以用来记忆各种复杂度和稳定性的表格。真题的使用也有讲究别留到最后两周才开始做。我的做法是复习完一个模块后就从历年真题中找到相应模块的题目先做一遍检验学习效果。全部复习完后再整张卷子限时模拟。这样既不会浪费真题又能随时调整复习重点。4.3 期末、考研、面试三种场景的侧重点同样的数据结构知识期末、考研和面试的考查重点其实不太一样。搞清楚自己属于哪一类复习策略就会更精准。期末考试的侧重点是“广度”概念要清晰算法要能默写手工模拟要熟练但代码的工程性要求不高能写对核心逻辑就行。所以期末复习要多花时间在概念辨析和手工推导上尤其是简答题和填空题这是送分大头。考研数据结构包括哈工大的考研专业课的侧重点是“深度规范”除了要掌握基础算法还要能分析算法的复杂度、证明算法的正确性或讨论算法的适用场景。考研大题中的算法设计题往往不满足于“能跑”而是考察你是否考虑了空间优化、是否能处理边界条件。比如求链表倒数第k个节点你用遍历两遍的方法能得基础分用双指针一遍遍历的方法才能得满分。求职面试则更贴近实战。面试官不会让你画二叉树的遍历过程而是直接让你在白板上写代码还要边写边讲思路。面试题往往没有标准答案更看重你分析问题的思路、对边界情况的敏感度、以及代码的可读性和健壮性。如果你是为了面试准备建议以LeetCode为主按照数据结构分类刷题每道题都要做到自己能讲清楚思路、能分析复杂度、能处理特殊输入。5. 高频失分点与避坑指南5.1 指针与内存C语言版数据结构的头号杀手如果在哈工大数据结构期末考试的所有失分点里排个名指针操作绝对排第一。链表题写到最后发现节点丢了、树题递归参数传错了、申请内存忘了释放导致结果诡异这些都是真实考场上会发生的事。链表操作最经典的一个坑修改指针前没有保存后继节点。比如你要在链表中删除当前节点p的下一个节点逻辑是p-next p-next-next。但如果你先写成p p-next再想改p-next就已经晚了因为此时p已经指向了要删除的节点。这个错误的本质是“当前遍历的指针”和“要修改的节点指针”混为一谈。考试前建议专门练几道链表的题目把插入、删除、逆置的指针变化画出来把每一步指向哪个节点搞清楚。画熟之后考场上就不会发懵。另一个高频错误是“访问空指针”。比如判断链表是否有环时快指针每次走两步如果链表只有两个节点且没有环第二次循环时fast就变成了NULL这时候再执行fast-next就会直接崩溃。所以这类题的循环条件一定要写成while(fast ! NULL fast-next ! NULL)先判断快指针自身不为空再判断它的next不为空逻辑顺序不能颠倒。树的操作中递归函数里对空指针的处理也要格外小心。树的递归出口通常是if (root NULL) return 0;很多人把这个条件漏了或者写成了if (root-left NULL root-right NULL) return 1;导致叶子节点和空节点混为一谈。这种错误的排查难度很高因为有时候结果碰巧是对的有时候是错的你会误以为代码没问题只是运气不好。5.2 递归边界与栈溢出递归是数据结构的核心思想也是很多人的噩梦。期末试卷里树相关的题目几乎离不开递归但递归写错的方式千奇百怪忘记写递归出口、递推公式不对、参数传错每一种都让人抓狂。递归边界是最容易出错的地方。比如求二叉树深度的递归代码int maxDepth(struct TreeNode* root) { if (root NULL) return 0; int leftDepth maxDepth(root-left); int rightDepth maxDepth(root-right); return (leftDepth rightDepth ? leftDepth : rightDepth) 1; }你可能觉得这段代码很简单但考场上很多人会把递归出口漏掉或者把返回条件写成if (root-left NULL root-right NULL) return 1;。后者的问题在于如果某棵子树为空递归就会继续往NULL走最终因为没有出口而栈溢出。递归另一个常见的坑是“结果重复计算”。比如求斐波那契数列的递归实现虽然代码简洁但实际上做了大量重复计算时间复杂度高达O(2^n)。期末试卷如果考到“用递归求斐波那契数列分析它的时间复杂度”很多人会不假思索地写成O(n)这就错了。正确的答案是O(2^n)因为递归调用的展开是一棵满二叉树节点数是指数级的。最后提醒一下递归函数里修改全局变量或静态变量时一定要考虑递归顺序对结果的影响。比如求二叉树中某条路径的和如果你用全局变量累加递归返回时忘了做“回溯”结果就会错得离谱。这种“回溯”的思想在树的路径问题中应用极多复习时值得多花时间。5.3 复杂度计算大O的坑复杂度的计算看似简单但期末试卷上处处是陷阱。很多同学会背“快排是O(nlogn)”但拿到一个有特定输入的题目却不知道怎么从代码推导复杂度。第一个坑是把“平均情况”和“最坏情况”混为一谈。快速排序的平均时间复杂度是O(nlogn)但在序列已经有序的特殊情况下如果每次选的基准都是最小或最大元素时间复杂度会退化到O(n²)。期末题如果问“快速排序在什么情况下最坏”“最坏复杂度是多少”你就要把这种退化场景写明白而不是只回答一个平均复杂度。第二个坑是忽略常数系数或者反过来把常数系数看得太重。复杂度分析的核心是“增长趋势”2n和100n都算O(n)因为当n趋近无穷大时它们相对n²都是线性增长的。但有时候期末试卷会问“这段代码的时间复杂度是O(n)还是O(n²)”此时你需要仔细数一下内层循环的执行次数而不是只看循环层数。比如下面这段代码for (int i 1; i n; i * 2) { // 执行一些操作 }这个循环的时间复杂度是O(logn)而不是O(n)因为i是倍增的。类似的套路还在二分查找中频繁出现复习时一定要多注意循环变量的变化方式。5.4 边界条件与特殊输入很多人在期末考场上失分不是因为不会做而是因为没考虑边界条件。比如求二叉树深度根节点为NULL时应该返回0还是1合并两个有序链表时如果其中一个链表为空应该怎么处理判断括号匹配时空字符串算不算匹配成功算法设计题的隐藏加分项往往就藏在这些边界条件里。2021年秋季学期试题里的链表逆置如果head为NULL或者只有一个节点你的程序能不能直接返回正确答案很多人写代码时先处理一般情况结果递归或循环到了边界就崩了。对此我建议拿到算法设计题后先花十秒钟想清楚三件事输入为空时怎么办、只有一个元素时怎么办、最坏情况是什么。想清楚这三件事再动笔代码的健壮性会明显提升。另外写算法设计题时一定要养成“先判断空指针再访问成员”的习惯。C语言里访问指针的成员之前必须先确认指针不是NULL否则就是非法内存访问。很多同学平时写代码用IDE调试惯了编译错误和运行崩溃都有提示但考场上没有编译器只有草稿纸和笔这种低级错误如果出现在你的答卷上是非常可惜的。6. 资料选择与信息获取的实战经验6.1 教材之外的硬核资料清单如果你正在备考哈工大数据结构期末考试只啃一本严蔚敏肯定不够。我的建议是至少准备三份资料教材、真题集、代码练习工具。教材不必多说真题集是重中之重——哈工大的期末题往往有延续性今年的题目很可能是往年题的变体所以通过学长学姐或校内打印店收集近五年的真题是性价比最高的复习方式。代码练习工具方面我推荐Dev-C或者Visual Studio Code搭配C/C插件。原因很简单期末算法设计题要求用C语言写代码你必须在日常练习中就使用C语言而不是Java或Python。Python写起来太顺手了以至于很多人用Python的思维去写C语言代码结果指针根本不会用。平时练习时多用C语言写链表和树的题考场上才能手到擒来。如果你对自己的自制力没信心可以找两三个同学组一个“刷题小组”每周固定时间对同一套题进行限时训练然后互相批改。这个方法看起来简单但效果极其显著。因为批改别人的代码时你会发现很多自己也容易犯的错这种“以教代学”的方式比一个人闷头刷题高效得多。6.2 关于“回忆版试题”的正确使用姿势在收集资料的过程中你大概率会遇到一个词——“回忆版试题”。因为高校期末考试一般不对外公开试卷所以网上流传的很多期末真题都是上一届考生考完后回忆整理的。2021年秋季学期哈工大数据结构期末试题在网络上也主要以回忆版的形式流传。回忆版试题的价值在于帮你圈定题型和知识点范围。但要注意回忆版试题可能有错误或者遗漏比如某道算法设计题的输入输出描述不完整某个选择题的选项顺序变了。使用回忆版试题时不要盲目信任最好结合教材课后题和考研真题一起比对如果发现回忆版里出现了明显不合理的表述直接跳过别浪费时间纠结。另外一个使用回忆版试题的技巧你可以把回忆版试题当作“知识点索引”来用。比如回忆版里出现了一道“用非递归方式实现二叉树中序遍历”的算法设计题那么你就要把非递归遍历的三种方式用栈模拟先序、中序、后序全部练一遍如果回忆版里出现了“用Dijkstra算法求最短路径”的简答题你就要把Dijkstra算法的每一步手工模拟过程都吃透。这样做一套回忆版试题就能帮你辐射出一大片复习范围效率远高于盲目刷题。我个人在实际操作中的体会是考前复习最忌讳“押题式复习”就是猜老师今年一定会考某个知识点然后把其他内容全丢到一边。数据结构的各个模块是互相关联的链表和树结合、树和图结合、图和查找结合这些跨模块的综合题才是期末大题的真正面目。所以复习的宽度一定要够基础概念要全覆盖算法设计题要有重点地练。把上面这些知识点和题型吃透再加上一定的代码练习量我相信这份试卷的成绩一定不会辜负你的努力。祝考试顺利。