简介:面向报考华中科技大学计算机相关专业、备战834计算机综合的考研读者,这份2019年真题PDF适合用于阶段自测、把握命题重点与查漏补缺。题目涉及串的定义与性质、链表与队列操作、数组访问复杂度、二叉树遍历、图遍历与拓扑排序、堆排序、哈夫曼编码,以及计算机网络等综合内容,并配有选择、填空、判断等题型的解析线索,可帮助读者还原考场题型、核对解题思路并梳理高频考点。压缩包内共1个PDF文件,大小约1.37MB,便携易读,适合打印、平板批注或按题型拆分复习;其中选择题偏重概念辨析,填空与判断题便于检验细节记忆,综合题可辅助训练分析过程。已有585人学习下载,可作为真题演练与考点复盘的参考,便于检验复习效果、定位薄弱环节并安排后续强化。
1. 834 真题是什么:三个数字背后的一整张卷子
「834」这三个数字,对没考过研的人来说约等于乱码,对另一群人来说却是一年的复习坐标。它是某类院校自主命题的一门计算机综合专业课的科目代码,而所谓「834 真题」,就是这门课往年真正发到考场上的那张卷子——上面的选择题、填空题、判断题,以及几道必须在纸上动手推演的大题,一道不少。打个比方,考纲告诉你厨房里有哪些食材,教材教你怎么切菜,真题才是那家餐厅真正端上桌的成品,你才知道火候、分量和摆盘到底什么标准。搞懂它是什么、为什么长这样、和市面上的模拟题差在哪,比闷头多刷十套卷子管用得多。
2. 这张卷子为什么长这样:自命题的筛选逻辑
2.1 自命题的底层逻辑:一张卷子就是一份招生偏好
公共课由全国统一命题,专业课则由招生单位自己出。这件事听起来只是「谁出卷」的差别,实际上决定了整张卷子的性格:谁在出题、用哪本教材、课上讲到哪个深度,都会留在题目里。834 这类科目代码背后,通常是把两门本科核心课合在一张卷子上——一半是数据结构,一半是计算机网络。
打个比方,统考像全国统一体检,指标固定、人人可比;自命题更像挂了个专科号,医生按自己最关心的那几项开单子。所以你会看到,有些知识点在教材里只占半页,卷子上却反复出现;有些章节教材写得很厚,卷子里几乎不碰。这跟随意无关,只是「这门课在这所学校是怎么教的」被原样搬到了考场上。
这也解释了为什么不少人刷完通用的习题册,第一次见到 834 真题会觉得画风不对。题目并没有超出考纲,只是密度分布不一样。通用习题册追求覆盖面,真题追求区分度——它要在一张纸上,把「背过」的人和「想过」的人分开。
对备考的人来说,这层认知的价值在于:真题不是练习题,而是招生单位公开的一份偏好声明。它告诉你哪些东西必须熟练到条件反射,哪些知道个大概就行。看懂这份声明,比多做二十道同类型题更省时间。
2.2 两门课的分工:一门考推演,一门考流程
数据结构那半张卷子,几乎全是「给你条件,你一步步推」。给中序序列和前序序列,推出后序序列;给顶点集、边集和权值,按克鲁斯卡尔算法一条一条挑边;给一组关键字和一个散列函数,把表填出来再算查找成功的平均查找长度;给一个初始序列,建出小根堆再重建一次。这些题不给代码、不让你上机,要你在纸上扮演一台机器。
计算机网络那半张卷子,气质完全不同。它更像在考「你记不记得流程的每一步」:TCP 三次握手里第 2、3 个报文的确认序号分别是多少;选择重传协议里,序号位数决定了窗口上限;CSMA/CD 属于哪一层;OSPF 的核心算法是什么;DNS 的查询分成递归和迭代两种。答案往往只有几个字,但前提是你脑子里那条流水线是完整的。
一门课考「能不能按规则走完」,一门课考「记不记得流程」,两者合在一张卷子上,正好能筛出两种能力都在线的人。理解了这一点,复习方法自然要分开:数据结构靠动手在纸上推,写得慢、画得丑都没关系,关键每一步的中间状态要对;计算机网络靠把流程默写出来,写到能自己给自己讲一遍为止。
还有一个容易被忽略的细节:两门课在同一张卷子上,分值不会平均分配,题目节奏也不一样。选择题和填空题属于快速题,几秒钟一道;推演大题和网络计算题动辄占去二十分钟。考场上最容易出错的地方在于审题慢、写字慢,并不是不会做。真题把这种节奏忠实地保留了下来,模拟题通常保留不了。
2.3 考纲画范围,真题画密度
考纲是一张地图,告诉你考试涉及哪些地方;真题是一串脚印,告诉你出题人实际走过哪些路。两者的信息量差得很远。考纲写「排序」,你并不知道是考冒泡还是考堆;真题连着几年都出现「建初始堆 + 一趟重建」,你就知道这条路的优先级高到什么程度。
举个具体的小例子。判断题里常有一句大意是:算法 A 的时间复杂度是 O(n),算法 B 是 O(n²),所以算法 A 优于算法 B。这句话在教材里往往只是一句结论的反面,真题却把它单独拎出来做成一道题。因为它考的是「复杂度这个指标能说明什么、不能说明什么」——是边界感,不是记忆量。
再比如填空题里问哈夫曼树中度数为 1 的结点有几个。这题真正的考点,是让你确认哈夫曼树作为一棵严格的二叉树,不存在只有一个孩子的结点,答案恒为 0。这类题的共同点是:计算量几乎为零,但定义里的每一个限定词都必须清楚。
所以看真题的时候,别只统计「哪一章出了几道题」。「同一个知识点被换了几种问法」这一项更有价值——从选择题换到判断,从判断换到填空,问法一变,边界就露出来了。
3. 一份 834 卷子的骨架:从选择题到 CRC 计算题
3.1 选择题:一题一个概念边界
选择题看着简单,其实是整张卷子里最考「边界」的部分。它很少问「链表是什么」,而是问「如果最常用的操作是在最后一个结点之后插入、以及删除第一个结点,这四种链表里哪种效率最高」。这题要你先想清楚单链表、双链表、循环不循环四种组合在头尾操作上的差别,再综合出答案。不会有人因为不知道链表而做错,做错的人通常是因为知道得不够细。
再比如第一题关于「串」的描述:空串是不是空白串、串里能不能只放字母、串长是不是必须大于零、串是不是一种特殊的线性表。这四个选项分别对应四个细节,只有一个对。这种题的杀伤力在于,每一个错误选项看起来都「差不多对」。
还有一类是纯结论题,比如一维数组读取第 i 个元素的平均时间复杂度是 O(1),因为数组是连续存储的,靠下标直接算地址。听起来像送分题,但它考的是「随机访问」这个词的成立条件——一旦换成链表,这个 O(1) 就不成立了。你可以把它当成一个小小的判断题训练场。
把历年选择题按知识点排一下,你会发现大部分题集中在这几块:串和广义表的定义、链表的变体、队列和栈的指针操作、图的存储与边数关系、排序算法的适用场景。全是定义边界,不是算法细节。
3.2 填空与判断:专挑「差一点就对」的地方
判断题是整张卷子里最容易让人栽跟头的地方,因为它专挑那些「听起来对、其实差一点」的句子。比如「静态链表与动态链表在元素的插入删除方面类似,不需要做元素的移动」——前半句对,后半句的逻辑不成立;比如「循环队列在入队操作时,可能会发生上溢」——这句本身对,但很多人凭直觉会判错;再比如「调用一次深度优先遍历可以访问到图中的所有顶点」——漏了「图连通」这个前提就错了。
还有一句典型的:「层次遍历初始堆可以得到一个有序的序列。」堆只保证根结点是最值,兄弟之间、父子之间没有顺序约束,层次遍历出来当然排不了序。这类题的共同结构是:把某个算法的「输出结果」和「附加性质」混在一起说,让你在熟悉的词里滑过去。
填空题的坑眼更细。问广义表的表尾是什么,考的是「表头是第一个元素,表尾是去掉表头后剩下的表」这个定义;问选择重传协议在 32 位帧序号下接收窗口最大是多少,考的是窗口上限与序号空间的关系,业内通行的结论是窗口不能超过序号空间的一半;问 IP 地址 192.168.211.99/24 的网络地址,考的是掩码与运算,答案是前 24 位保留、后 8 位清零。
这些题全都不需要长篇推导,却要求你对定义的每一个字都当真。复习的时候如果只记「大概意思」,这部分会持续失分。
3.3 推演大题:在纸上模拟一台机器
大题的气质和前两类完全不同。克鲁斯卡尔算法要你按权值从小到大挑边、随时判断会不会成环,最终写出依次得到的各条边和权值之和;哈希表要你在表长 7、散列函数取模 7 的条件下,用线性探测法把一组关键字一个一个放进去,再算查找成功的平均查找长度;二分查找要你画出判定树,数出查某个关键字时的比较次数;堆排序要你先建出初始小根堆,再做一趟重建。
这些题的本质是「人在纸上跑程序」。下面这段代码就是把那道哈希大题翻译成机器能跑的样子,你可以拿它对照自己手推的结果:
# 线性探测法构造哈希表,散列函数 H(k) = k mod 7 keys = [26, 32, 9, 28, 14, 68, 46] size = 7 # 表长必须与散列函数里的模数一致 table = [None] * size for k in keys: i = k % size # 理论位置 while table[i] is not None: # 位置被占,往后挪一格 i = (i + 1) % size # 取模保证撞到表尾后绕回表头 table[i] = k # 找到空位落座 print(table) # [28, 14, 9, 46, 32, 26, 68]size是表长,一旦和散列函数里的模数不一致,探测路径就全错了;i是探测下标,(i + 1) % size这一步让探测在表内循环,绕回表头而不是越界。跑完得到的表是[28, 14, 9, 46, 32, 26, 68],其中 46 因为理论位置 4 被 32 占着、后面连着 5、6、0、1、2 都被占,一路探到下标 3 才落座,比较了 7 次。
平均查找长度就是把这些比较次数加起来除以关键字个数:26、32、9、28 各 1 次,14 是 2 次,68 是 3 次,46 是 7 次,合计 16,除以 7 约等于 2.29。手推和代码对不上的地方,十有八九是探测到表尾之后忘了绕回来,或者把「比较次数」和「移动次数」记混了。
| 题型 | 常见问法 | 真正考的能力 |
|---|---|---|
| 选择题 | 四种链表的效率比较、串的定义 | 概念边界是否清楚 |
| 填空题 | 表尾、窗口上限、网络地址、拓扑序列 | 定义的限定词是否记全 |
| 判断题 | 「类似」「可能」「一定」这类措辞 | 结论成立的前提条件 |
| 推演大题 | 克鲁斯卡尔、哈希表、判定树、建堆 | 中间状态是否每一步都对 |
| 网络计算题 | 路由表、距离向量一次迭代、CRC | 流程 + 算术,两样都不能少 |
3.4 网络部分:流程加计算,两样都不能少
网络这半张卷子的题型很稳定:一堆填空、一组计算、一道对比论述。填空部分覆盖面很宽——多址访问协议分成随机接入、受控接入和轮流协议三类;FTP 传文件要建立两个连接,一个控制、一个数据;CSMA/CD 是数据链路层的协议;路由选择算法从广义上可以分成静态和动态两类;OSPF 的核心算法是 Dijkstra 最短路径算法;DNS 的查询类型分为递归和迭代。
计算题部分更能看出出题人的偏好。让你画出 OSI 参考模型和 TCP/IP 参考模型,是考分层结构;让你比较虚电路和数据报,是考连接建立、目的站地址、路由选择、路由器故障后的影响、分组顺序、端到端差错处理和流量控制这几个维度;让你填固定路由表、跑一次距离向量迭代,是考「表是怎么被更新出来的」;给一个生成多项式 x⁴+x³+1 让你判断传输是否出错,是考 CRC 的除法过程。
这类题的共同点是:答案不靠灵感,靠流程的完整度。你少记了「两个连接」里的任何一个,FTP 那道填空就空着;你忘了距离向量更新时要加上邻居到目的地的开销,整张表就全错。网络部分的失分,绝大多数是流程漏了一步,而非理解不了。
4. 易混概念拆开看:真题、模拟题、统考卷差在哪
4.1 真题不等于模拟题:命题人和年份的差别
易混点在于,两者都叫「卷子」,都印着选择题、填空题、大题,纸面观感几乎一样。混的原因很简单:模拟题本来就是照着真题的样子做的,连题号顺序都学。
区分的方法看两件事:命题人和年份。真题有明确的年份和真实的命题过程,题目的密度、难度曲线、甚至错别字都是原样保留下来的;模拟题是别人根据印象仿写的,题型分布是推测出来的,难度往往偏高或偏低。更关键的是,模拟题里那种「为了难而难」的题,真题里很少见——真题的每一道题都在区分度上有位置,不会无缘无故刁难人。
所以模拟题适合在后期练手感和时间分配,不适合用来判断「考试重点在哪」。重点这件事,只有真题说了算。
4.2 自命题的 834 不等于统考卷:同一门课,两种出法
易混点在于,两边都考数据结构,甚至都考排序、树、图。混的原因是知识点名字完全重合,看着像同一套东西换了个编号。
区分要看三件事。第一,范围。统考卷有公开且稳定的考试大纲,题型结构多年不变;自命题的范围跟着本校的课程设置走,可能把计算机网络和数据结构压在一张卷子上,也可能某一章压根不考。第二,深度。自命题更愿意出「手推」类的大题,因为它要在有限的题量里看出推演能力。第三,问法。同一道哈希表的题,统考可能给你四个选项选平均查找长度,自命题直接让你把表填出来。
结论很直接:拿统考卷的复习节奏去套自命题,容易出现「练了一堆不考的、漏了一堆常考的」。
4.3 期末卷不等于考研真题:同一位老师,两种考法
易混点在于,同一门课、可能还是同一批老师出题,题目看起来有亲缘关系。混的原因是期末卷里确实会出现真题的影子,有些题型几乎一模一样。
区分的关键在覆盖面。期末考的是「这学期教了什么」,范围窄、深度浅,一道题往往只测一个刚讲过的点;考研考的是「这门课的核心结构」,范围宽、纵深大,一道题可能同时牵动三个知识点。比如期末可能只让你写一个排序的结果,真题会让你先建堆、再重建、再说明复杂度。
所以期末卷可以当热身,但别把它当难度参照。用期末卷的分数预估自己的水平,是这个环节里最常见的高估。
4.4 「会做这道题」不等于「会这个知识点」
易混点在于,题做对了,人就默认自己掌握了。混的原因是反馈太直接:对勾一打,大脑立刻给出「学会了」的信号。
区分的方法只有一个:换个问法再做一次。这道题以选择题形式出现你能选对,改成判断题还对不对?改成填空题让你写出中间结果,还写不写得出来?比如「空串就是空白串」这句话,作为选择题选项你能排除,作为判断题让你打叉,你还犹豫不犹豫?
能扛住换问法的,才叫知识点;只能扛住原题的,那叫题目记忆。真题最擅长的事,就是把同一个知识点用不同问法反复摆在你面前。
4.5 「复杂度低」不等于「算法更优」
易混点在于,教材常用复杂度给算法排座次,O(n) 看起来天然压过 O(n²)。混的原因是这套排序在多数场景下确实成立,于是被当成了无条件结论。
区分要加三个限定。第一,问题规模。n 只有几十的时候,O(n²) 和 O(n) 的差距小到测不出来,常数因子反而更管事。第二,额外条件。归并排序复杂度漂亮,但要多一份空间;插入排序复杂度一般,可它对近乎有序的数据快得离谱,还是稳定的。第三,任务目标。要从 8000 个记录里挑出最小的 14 个,堆排序比全排一遍再取前 14 个更省事,这里起决定作用的是「只取前 k 个」这个目标,复杂度只是次要因素。
真题里那句「A 是 O(n),B 是 O(n²),所以 A 优于 B」,挖的就是这个坑。
5. 真题的第二层信息:为什么答案比题目更值得读
5.1 同一个知识点,换一种问法还认不认得
一份卷子里的题目是有限的,但题目背后的知识点是成网的。真正值得花时间的,是把一道题还原成它所在的那个知识点,再看这个知识点还能怎么被问。
拿「串」来说。卷面问的是「下面关于串的描述中哪句正确」,还原出来的知识点是:串是特殊的线性表,元素只能是字符,长度可以为零,空串不等于空白串。围绕这一个点,可以变出至少四种问法:判断空串和空白串是否等价、问串长为零时表头表尾怎么算、问串和数组的区别、问模式匹配的复杂度。真题只给了其中一种,另外三种是你自己该补的。
这个过程有点像看菜谱:菜谱只写了怎么做这一道菜,但你会了火候和调味,同一套手法能做出十几道。只记这一道菜放几克盐,换一道就废了。
5.2 错题分两类:知识漏洞和习惯漏洞
错题本如果只抄题和答案,价值有限。更有用的是给每道错题贴一个标签:是知识没记住,还是习惯出了问题。
知识漏洞比较好办,翻回教材对应那一节就行。习惯漏洞麻烦得多,也更常见。比如哈希表那道题,思路完全正确,只是探测到表尾忘了绕回表头;比如建堆那道题,建对了但重建时把「摘掉堆顶、把最后一个元素放上来、再向下调整」的顺序搞反;比如判断题里看到「类似」「不一定」「可能」这几个词就放松了警戒。
这两类错的补救方式完全不同。知识漏洞靠重读定义,习惯漏洞靠固定流程——每次都按同样的顺序推:先画图、再标中间状态、最后写答案。真题做多了你会发现,习惯漏洞造成的失分,比知识漏洞多得多,而且更隐蔽,因为它每次看起来都只是「差一点」。
5.3 为什么「刷完一遍」约等于没刷
很多人对真题的使用方式是:拿出来,做完,对答案,打勾打叉,然后翻篇。这套流程的产出只有一样东西——一个分数印象,别的什么也没留下。
问题出在「做完」这个动作上。做题的时候,你的注意力全在「这一空填什么」;对答案的时候,注意力又全在「对不对」。真正有价值的信息在这两段时间之外:这道题想考什么、我为什么在某个中间步骤上卡住了、如果题目把条件换一个我这套思路还成不成立。
所以更有效的用法是把一份卷子当三次用。第一次只做不判,把卡住的地方标出来;第二次拿答案对照,不看对错,只看「我的中间状态和标准答案差在哪一步」;第三次隔一段时间再回来,只看标出来的地方,问自己一句「现在还卡不卡」。第三遍才真正完成信息的压缩。
真题之所以值得这样反复拆解,是因为它的题目密度高、没有废话。一份模拟题里可能有几道是为凑数写的,真题里几乎每道题都在某个位置上有用。既然信息密度这么高,只过一遍就太浪费了。
6. 什么时候该翻开真题,什么时候别碰
真题有用,但用途很窄,用早了、用晚了都会失效。
该用的时候,是这三类场景。一是刚开始复习、还没定计划的时候,先完整看一遍卷子,看清题型和分布,再决定每章花多少时间;二是某一章学完之后,翻出卷子里对应的那几道题,检验自己是不是真的把边界搞清楚了;三是考前一个月,按考试时长完整做一遍,练题量分配和书写速度——推演大题写满一页纸,跟只在脑子里过一遍的体验完全两回事。
别碰的时候,也有几种。基础还没过完、连树的遍历都推不顺的时候,直接做真题只会得到一堆错号,除了打击情绪没别的收获;把它当刷题量来源的时候,真题数量是固定的,刷完就没了,用它堆数量是浪费;还有最典型的一种,做完只看分数不看过程,那等于把最有价值的部分直接丢掉。
| 场景 | 建议 | 原因 |
|---|---|---|
| 刚起步、想定复习优先级 | 通读不做的,只统计题型分布 | 先看密度,再分时间 |
| 某一章刚学完 | 挑对应题目精做 | 立刻检验知识点边界 |
| 基础还没过完 | 先放着 | 错一片,收获为零 |
| 考前一个月 | 按真实时长完整做一遍 | 练时间分配和书写 |
| 想靠它刷题量 | 不合适 | 总量固定,用完就没了 |
我自己吃过一次亏。当年第一次拿到卷子,直接从头做到尾,做完一算分,觉得还行,就把卷子收起来了。等到考前两周再拿出来,发现当初卡住的那几道题还是原样卡住——因为我从来没回头看过自己卡在哪一步,只记住了分数。从那以后我每次拿到一份真题,都强制先把答案收起来,做完只标卡点、不算分数,隔一周再回来看那些标记。这套习惯比多做十套卷子管用得多。
希望帮到你。
本文还有配套的精品资源,点击获取