计算机专业(基础综合)模拟试卷296
单选题
1.已知程序如下:
int S(int n)
{
return(n<=0) ?0:s(n-1)+n;
}
void main( )
{
cout<<S(1);
}
程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是( )。(A)
A. main( ) ->S(1) >S(0)
B. S(0) ->S(1) ->main()
C. main()>S(0) ->S(1)
D. S(1) ->S(0) ->main()
解析:函数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的不同二叉树的个数是( )。(B)
A. 13
B. 14
C. 15
D. 16
解析:二叉树的先序遍历定义为:若二叉树为空,则空操作:否则,访问根节点,然后先序遍历左子树,最后先序遍历右子树。本题中,结点a为二叉树的根节点,左右子树的先序遍历可能存在下面四种情况:①左子树为空,bcd 为右子树:②b为左子树,cd 为右子树:③bc为左子树,d为右子树:④bcd为左子树,右子树为空。然后将左右子树继续分解,如第①种情况的右子树先序遍历(bcd)可能有:a.左子树为空,右子树为cd:b.左子树为c,右子树为d:c.左子树为cd,右子树为空。按照这种方法继续分解左右子树,直到不能再分解为止,可得第①和④种情况各包含5种不同情况,第②和③种情况各包含2种情况,因此总共有14种不同的二叉树。
3.下列选项给出的是从根分别到达两个叶节点路径上的权值序列,能属于同一棵哈夫曼树的是( )。(D)
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
解析:哈夫曼树是带权路径长度最短的二叉树。由根节点出发到两个叶子节路径中,第二个被访问的两个结点的权值要么相等,要么和为根节点的权值,故B项错误。同理,通过第三个被访问的节点排除A项。C项,由两条路径可推出三个叶子节点的权值分别是:3、10和11,而根据哈夫曼树的定义可知,权值为3的节点应该和权值为10的结点结合,故C项错误。D项,反推出有四个叶子节点,权值分别为:5、5、6和8,满足哈夫曼树的条件。
4.现在有一颗无重复关键字的平衡二叉树(AVL树),对其进行中序遍历可得到一个降序序列。下列关于该平衡二叉树的叙述中,正确的是( )。(D)
A. 根节点的度一定为2
B. 树中最小元素一定是叶节点
C. 最后插入的元素一定是叶节点
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开始对图进行深度优先遍历,则可能得到的不同遍历序列个数是( )。(D)
A.
B. 3
C. 4
D. 5
解析:根据题意知有向图的结构如图所示。深度优先遍历的特点是尽可能先对纵深方向进行搜索,所以可能得到的不同遍历序列分别是:①V0→V2→V1→V3;②V0→V2→V3→V1;③V0→V1→V3→V2;④V0→V3→V2→V1:⑤V0→V3→V1→V2。
6.下列选项中,不能构成折半查找中关键字比较序列的是( )。(A)
A. 500,200,450,180
B. 500,450,200,180
C. 180,500,200,450
D. 180,200,500,450
解析:折半查找的过程是:先确定待查找记录所在的范围,然后逐步缩小范围直到找到或找不到该记录为止。折半查找的关键字序列满足:对每一个关键字,其后面的所有关键字序列或者都小于等于该关键字或者都大于等于该关键字。A项错误,第三次比较的关键字为450,说明待查关键字位于200~450间,所以第四次比较时不会遇到关键字180。
7.已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc\\(C)
A. i=1,j=0
B. i=5,j=0
C. i=5,j=2
D. i=6,j=2
解析:模式匹配(KMP)算法对普通的暴力匹配的改进在于:每当匹配过程中匹配失败时,主串(本题为S)的指针(i)不需要回溯,而是利用已经得到的“部分匹配”的结果将模式串(t)向右“滑动,,尽可能远的一段距离后,继续进行比较。模式串“滑动”的距离是由模式串(t)本身决定的,即t的子串t[0…j-1】中前缀串和后缀串相等的最长长度。本题中第一次失配i=5,字串为“abaab\\
8.下列排序算法中元素的移动次数和关键字的初始排列次序无关的是( )。(C)
<本文档预览:3000字符,共14451字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载