1、将一个10x10对称矩阵M的上三角部分的元素m,j (1≤i≤j≤10)按列优先存入C语言的一维数组N中,元素m7,2在N中的下标是( )。
A、15
B、16
C、22
D、23
答案:C
解析:
上三角矩阵按列优先存储,先存储仅1个元素的第一列, 再存储有2个元素的第二列,以此类推。m7,2位于左下角,对应右上角的元素为m2,7,在m2,7之前存有:
第1列:1
第2列:2
…
第6列: 6
第7列: 1
前面共存有1+2+3+4+5+6+1=22个元素(数组下标范围为0~21),注意数组下标从0开始,故m2,7在数组N中的下标为22,即m7,2在数组N中的下标为22。.
2、对空栈S进行Push和Pop操作,入栈序列为a, b, c, d,e,经过Push, Push, Pop, Push, Pop, Push,Push, Pop操作后得到的出栈序列是( )。
A、b,a,c
B、b,a,e
C、b,c,a
D、b,c,e
答案:D
解析:按题意,出入栈操作的过程如下:故出栈序列为b,c, e。
3、对于任意-棵高度为5且有10个结点的二叉树,若采用顺序存储结构保存,每个结点占1个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元数量至少是( )。
A、31
B、16
C、15
D、10
答案:A
解析:二叉树采用顺序存储时,用数组下标来表示结点之间的父子关系。对于一棵高度为5的二叉树,为了满足任意性,其1~5层的所有结点都要被存储起来,即考虑为一棵高度为5的满二叉树,总共需要存储单元的数量为1+2+4+8+ 16=31。
4、已知森林F及与之对应的二叉树T,若F的先根遍历序列是a, b,c,d,e,f,中根遍历序列是b,a,d,f,e,c,则T的后根遍历序列是( )。
A、b,a,d,f,e,c
B、b,d,f,e,c,a
C、b,f,e,d,c,a
D、f,e,d,c, b, a
答案:C
解析:森林F的先根遍历序列对应其二叉树T的先序遍历序列,森林F的中根遍历序列对应其二叉树T的中序遍历序列。即T的先序遍历序列为a, b,c,d,e,f,中序遍历序列为b,a,d,f,e,c。根据二叉树T的先序序列和中序序列可以唯-确定它的结构,构造过程如下:可以得到二叉树T的后序序列为b,f,e,d,c, a.
5、下列给定的关键字输入序列中,不能生成如下二叉排序树的是( )。
A、4,5,2, 1,3
B、4,5,1,2,3
C、4,2,5,3, 1
D、4,2, 1,3,5
答案:B
解析:每个选项都逐一验证,选项B生成二叉排序树的过程如下:显然B选项错误。
6、修改递归方式实现的图的深度优先搜索(DFS) 算法,将输出(访问)顶点信息的语句移到退出递归前(即执行输出语句后立刻退出递归)。采用修改后的算法遍历有向无环图G, 若输出结果中包含G中的全部顶点,则输出的顶点序列是G的( )。
A、拓扑有序序列
B、逆拓扑有序序列
C、广度优先搜索序列
D、深度优先搜索序列
答案:B
解析:DFS是一个递归算法,在遍历过程中,先访问的顶点被压入栈底。设在图中有顶点vi;它有后继顶点vj,即存在边<vi, vj>。根据DFS的规则,vi入栈后,必先遍历完其后继顶点后vi才会出栈,也就是说vi会在vj之后出栈,在如题所指的过程中,vi在vj后打印。由于vi和vj具有任意性,从上面的规律可以看出,输出顶点的序列是逆拓扑有序序列。
7、已知无向图G如下所示,使用克鲁斯卡尔(Kruskal) 算法求图G的最小生成树,加到最小生成树中的边依次是()。
A、(b,f), (b,d), (a,e), (c,e),(b,e)
B、(b,f), (b,d), (b,e), (a,e),(c,e)
C、(a,e), (b,e), (c,e), (b,d),(b,f)
D、(a,e), (c,e), (b,e), (b,f),(b,d)
答案:A
解析:Kruskal算法:按权值递增顺序依次选取n-1条边,并保证这n-1条边不构成回路。初始构造一一个仅含n个顶点的森林;第一步,选取权值最小的边(b,f)加入最小生成树;第二步,剩余边中权值最小的边为(b, d),加入最小生成树,第二步操作后权值最小的边(d,f)不能选,因为会与之前已选取的边形成回路;接下来依次选取权值9, 10, 11对应的边加入最小生成树,此时6个顶点形成了一棵树,最小生成树构造完成。按照上述过程,加到最小生成树的边依次为(b,f), (b, d), (a, e), (c, e), (b, e)。其生成过程如下所示。
8、若使用AOE网估算工程进度,则下列叙述中正确的是( )。
A、关键路径是从原点到汇点边数最多的一条路径
B、关键路径是从原点到汇点路径长度最长的路径
C、增加任一关键活动的时间不会延长工程的工期
D、缩短任一关键活动的时间将会缩短工程的工期
答案:B
解析:关键路径是指权值之和最大而非边数最多的路径,故选项A错误。选项B正确,是关键路径的概念。无论是存在一条还是存 在多条关键路径,增加任一关键活动的时间都会延长工程的工期,因为关键路径始终是权值之和最大的那条路径,选项C错误。仅有一条关键路径时,减少关键活动的时间会缩短工程的工期;存在多条关键路径时,缩短一条关键活动的时间不一定会缩短工程的工期,缩短了路径长度的那条关键路径不一定还是关键路径,选项D错误。
9、下列关于大根堆(至少含2个元素)的叙述中,正确的是( )。
I.可以将堆视为一棵完全二叉树
II.可以采用顺序存储方式保存堆
III.可以将堆视为一棵二叉排序树
IV. 堆中的次大值一定在根的下一层
A、仅I、II
B、仅II、III
C、仅I、II和IV
D、I、III和IV
答案:C
解析:这是一道简单的概念题。堆是一棵完全树,采用一维数组存储,故I正确,II 正确。大根堆只要求根结点值大于左右孩子值,并不要求左右孩子值有序,II 错误。堆的定义是递归的,所以其左右子树也是大根堆,所以堆的次大值一定是其左孩子或右孩子, IV正确。
10、依次将关键字5,6,9, 13, 8,2, 12, 15插入初始为空的4阶B树后,根结点中包含的关键字是()。
A、8
B、6,9
C、8,13
D、9,12
答案:B
解析:一个4阶B树的任意非叶结点至多含有m-1=3个关键字,在关键字依次插入的过程中,会导致结点的不断分裂,插入过程如下所示。得到根结点包含的关键字为6,9.
11、对大部分元素已有序的数组进行排序时,直接插入排序比简单选择排序效率更高,其原因是()。
I.直接插入排序过程中元素之间的比较次数更少
II.直接插入排序过程中所需要的辅助空间更少
III.直接插入排序过程中元素的移动次数更少
A、仅I
B、仅III
C、仅I、II
D、I、II和III
答案:A
解析:考虑较极端的情况,对于有序数组,直接插入排序的比较次数为n-1,简单选择排序的比较次数始终为1+2+…+n-1=n(n-1)/2,I正确。两种排序方法的辅助空间都是0(1), 无差别,II错误。初始有序时,移动次数均为0; 对于通常情况,直接插入排序每趟插入都需要依次向后挪位,而简单选择排序只需与找到的最小元素交换位置,后者的移动次数少很多,III 错误。