《数据结构》考研C语言版2021年考研真题库
第一部分 名校考研真题
全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合真题及详解
一、单项选择题:1~40小题,每小题2分,共80分。下列每题给出的四个选项中,只有一个选项符合题目要求。请在答题卡上将所选项的字母涂黑。
1已知程序如下:
int S(int n)
{
return  (n<=0) ? 0 : s(n-1)+n;
}
void main()
{
cout<<S(1);
}
程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是(  )。
A.main()->S(1)->S(0)
B.S(0)->S(1)->main()
C.main()->S(0)->S(1)
D.S(1)->S(0)->main()
【答案】A查看答案
【解析】函数S(int n)是一个递归函数:当实际参数小于等于零时则返回0,并终止递归;当实际参数大于零时则递归调用S(n-1),并将S(n-1)的结果加上n作为返回值。
程序从main()函数开始,首先调用main()函数;在main()函数中调用S(1)函数时,将main()函数的上下文保存到栈中,并进入函数S(1);由于函数S(1)的实际参数大于零,需要调用S(0),故将S(1)函数的上下文保存到栈中,进入S(0);在S(0)中,实际参数小于等于零,递归终止。
2先序序列为a,b,c,d的不同二叉树的个数是(  )。
A.13
考研时间2021考试时间B.14
C.15
D.16
【答案】B查看答案
【解析】二叉树的先序遍历定义为:若二叉树为空,则空操作;否则,访问根节点,然后先序遍历左子树,最后先序遍历右子树。本题中,结点a为二叉树的根节点,左右子树的先序
遍历可能存在下面四种情况:左子树为空,bcd为右子树;b为左子树,cd为右子树;bc为左子树,d为右子树;bcd为左子树,右子树为空。然后将左右子树继续分解,如第种情况的右子树先序遍历(bcd)可能有:a.左子树为空,右子树为cd;b.左子树为c,右子树为d;c.左子树为cd,右子树为空。按照这种方法继续分解左右子树,直到不能再分解为止,可得第种情况各包含5种不同情况,第种情况各包含2种情况,因此总共有14种不同的二叉树。
3下列选项给出的是从根分别到达两个叶节点路径上的权值序列,能属于同一棵哈夫曼树的是(  )。
A.24,10,5和24,10,7
B.24,10,5和24,12,7
C.24,10,10和24,14,11
D.24,10,5和24,14,6
【答案】D查看答案
【解析】哈夫曼树是带权路径长度最短的二叉树。由根节点出发到两个叶子节路径中,第二个被访问的两个结点的权值要么相等,要么和为根节点的权值,故B项错误。同理,通过第三个被访问的节点排除A项。C项,由两条路径可推出三个叶子节点的权值分别是:3、10和11,而根据哈夫曼树的定义可知,权值为3的节点应该和权值为10的结点结合,故C项错误。D项,反推出有四个叶子节点,权值分别为:5、5、6和8,满足哈夫曼树的条件。
4现在有一颗无重复关键字的平衡二叉树(AVL树),对其进行中序遍历可得到一个降序序列。下列关于该平衡二叉树的叙述中,正确的是(  )。
A.根节点的度一定为2
B.树中最小元素一定是叶节点
C.最后插入的元素一定是叶节点
D.树中最大元素一定是无左子树
【答案】D查看答案
【解析】二叉树的中序遍历定义是“若二叉树为空,则空操作;否则:中序遍历左子树;访问根节点;中序遍历右子树”。A项错误,当树中仅有一个或者两个结点时,根节点的度就可能不为2;B项错误,树中最小元素是中序遍历时最后访问的节点,当没有右子树时,最后访问的节点是根节点;C项错误,当最后插入的元素破坏树的平衡后,树会进行调整,使其成为中间节点;D项正确,由中序遍历的特点可知,左子树的值大于根节点,所以最大元素一定没有左子树。
5设有向图G=(V,E),顶点集V={V0,V1,V2,V3},边集E={<V0, V1>,<V0, V2>,<V0, V3>,<V1, V3>},若从顶点V0开始对图进行深度优先遍历,则可能得到的不同遍历序列个数是(  )。
A.2
B.3
C.4
D.5
【答案】D查看答案
【解析】根据题意知有向图的结构如图所示。深度优先遍历的特点是尽可能先对纵深方向进行搜索,所以可能得到的不同遍历序列分别是:V0→V2→V1→V3;V0→V2→V3→V1;V0→V1→V3→V2;V0→V3→V2→V1;V0→V3→V1→V2。
6暂缺
7下列选项中,不能构成折半查中关键字比较序列的是(  )。
A.500,200,450,180
B.500,450,200,180
C.180,500,200,450
D.180,200,500,450
【答案】A查看答案
【解析】折半查的过程是:先确定待查记录所在的范围,然后逐步缩小范围直到到或不到该记录为止。折半查的关键字序列满足:对每一个关键字,其后面的所有关键字序列或者都小于等于该关键字或者都大于等于该关键字。A项错误,第三次比较的关键字为450,说明待查关键字位于200~450间,所以第四次比较时不会遇到关键字180。
8已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”,采用KMP算法进行匹配,第一次出现“失配”(s[i]!=t[i])时,i=j=5,则下次开始匹配时,i和j的值分别是(  )。
A.i=1,j=0
B.i=5,j=0
C.i=5,j=2
D.i=6,j=2
【答案】C查看答案
【解析】模式匹配(KMP)算法对普通的暴力匹配的改进在于:每当匹配过程中匹配失败时,主串(本题为S)的指针(i)不需要回溯,而是利用已经得到的“部分匹配”的结果将模式串(t)向右“滑动”尽可能远的一段距离后,继续进行比较。模式串“滑动”的距离是由模式串(t)本身决定的,即t的子串t[0…j-1]中前缀串和后缀串相等的最长长度。本题中第一次失配i=5,字串为“abaab”,其相等且最长的前后缀为“ab”,一次下一个j=2。