判断题
对一棵结点数量超过1的AVL树进行中序遍历,将得到一个递增序列。
T F
分数 2
作者 周强
单位
一个无向图G,若某顶点v到其它每个顶点都有至少一条路径,则图G只有1个连通分量。
T F
分数 2
作者 周强
单位
最大堆(大顶堆、max-heap)从根结点到其它任一结点的路径上的所有结点值是从大到小排列的。
T F
分数 2
作者 周强
单位
如果无向图G必须进行3次深度优先搜索才能访问其所有顶点,则G一定没有回路(环)。
T F
分数 2
作者 周强
单位
若图G为连通图且不存在拓扑排序序列,则图G必有环。
T F
分数 2
作者 DS课程组
单位
某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。
T F
分数 2
作者 DS课程组
单位
将N个数据按照从小到大顺序组织存放在一个单向链表中。如果采用二分查找,那么查找的平均时间复杂度是O(log**N)。
T F
分数 2
作者 周强
单位
AVL树T的最大元素一定位于树根的右子树。
TF
分数 2
作者 周强
单位
若图G为连通图,则G的生成树是G的包含全部n个顶点的一个极大联通子图。
T F
分数 2
作者 周强
单位
一棵有9层结点的完全二叉树(层次从1开始计数),至少有255个结点。
T F
选择题(单选题)
设栈S和队列Q的初始状态均为空,元素a、b、c、d、e、f、g依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b、d、c、f、e、a、g,则栈S的容量至少是:
A.
1
B.
3
C.
2
D.
4
分数 2
作者 DS课程组
单位
对下图进行拓扑排序,可以得到不同的拓扑序列的个数是:
A.
3
B.
2
C.
1
D.
4
分数 2
作者 陈越
单位
若某图的深度优先搜索序列是{V1, V4, V0, V3, V2},则下列哪个图不可能对应该序列?
A.
B.
C.
D.
分数 2
作者 周强
单位
以下对于堆和哈夫曼树的描述,正确的是:
A.
堆一定是一棵完全二叉树,因此适合采用链式存储实现。
B.
堆的任意非叶节点的左右子树(如果非空)互换,仍然是堆。
C.
哈夫曼树的叶结点一定都在同一层。
D.
哈夫曼树中没有度为1的结点。
分数 2
作者 周强
单位
下列代码的时间复杂度是:
for(i=0; i<N; i++)
for(j=0; j<i; j+=2)
printf("%d,%d\n", i, j);
A.
O(N2)O(N^2)O(N2)
B.
O(N×i)O(N×i)O(N×i)
C.
O(N)
D.
O(N+i×j)
分数 2
作者 DS课程组
单位
将{28, 15, 42, 18, 22, 5, 40}依次插入初始为空的二叉搜索树。则该树的后序遍历结果是:
A.
5, 15, 18, 22, 40, 42, 28
B.
28, 22, 18, 42, 40, 15, 5
C.
5, 22, 18, 15, 40, 42, 28
D.
5, 22, 15, 40, 18, 42, 28
分数 2
作者 冯雁
单位
将元素序列{18, 23, 4, 26, 31, 33, 17, 39}按顺序插入一个初始为空的、大小为13的散列表中。散列函数为:H(Key)=Key%13,采用线性探测法处理冲突。问:当第一次发现有冲突时,散列表的装填因子大约是多少?
A.
0.63
B.
0.31
C.
0.54
D.
0.62
分数 2
作者 魏宝刚
单位
对于给定的有向图如下,其邻接矩阵为:
A.
B.
C.
D.
分数 2
作者 DS课程组
单位
对最小堆(小顶堆){1,3,2,12,6,4,8,15,14,9,7,5,11,13,10} 进行三次删除最小元的操作后,结果序列为:
A.
4,5,6,12,7,10,8,15,14,13,9,11
B.
4,6,5,13,7,10,8,15,14,12,9,11
C.
4,5,6,7,8,9,10,11,12,13,14,15
D.
4,6,5,12,7,10,8,15,14,9,13,11
分数 2
作者 DS课程组
单位
对N个记录进行堆排序,最坏的情况下时间复杂度是:
A.
O(log**N)
B.
O(Nlog**N)
C.
O(N)
D.
O(N2)
填空题
一棵二叉树的后序遍历序列是DEFBHGKCA
,中序遍历序列是DBEFAGHCK
,则它的前序遍历序列是 ________3 分
. (填写半角大写字母且不要添加空格,格式如ABCDEFG
).
分数 2
作者 周强
单位
如果一棵二叉树有20个度为2的结点,则它的叶结点数量为:________2 分个。 (填写半角阿拉伯数字如1234567890
,不要添加空格等字符)
分数 3
作者 周强
单位
若使用Kruskal算法获取下图的最小生成树,我们选择加入生成树的第四条边的权值是: ________3 分(填写半角阿拉伯数字如1234567890
,不要添加空格等其它字符)
分数 2
作者 周强
单位
如果无向完全图G
中有45条边,则G
的生成树有 ________2 分条边。(填写半角阿拉伯数字如1234567890
,不要添加空格等其它字符)
程序填空题
向最小堆中插入元素
以下程序包含一个“向最小堆中插入元素”的函数 insertIntoHeap( )
,
请填空将函数补充完整
(注意,堆中没有“哨兵”元素)
#include <stdio.h>
#include <stdlib.h>
/* 堆结构体定义 */
struct Heap{
int *data; // 堆元素存储空间指针,堆元素按照二叉树顺序存储的方式,从data[1]开始存放,data[0]不使用,无哨兵元素
int capacity; // 堆容量
int size; // 堆元素数量
};
struct Heap* initHeap(int capacity){
// 初始化堆
struct Heap* h;
h = (struct Heap*)malloc(sizeof(struct Heap));
if(!h) return NULL;
h->data = (int*)malloc(sizeof(int)*capacity+1);
if(h->data == NULL){
free(h);
return NULL;
}
h->capacity = capacity;
h->size = 0;
return h;
};
int insertIntoHeap(struct Heap* h, int x){
if( 1 分 ) return 0; // 堆满则返回0. (程序中没有定义名如 "IsFull( )"之类的函数)
int i;
for(i=++h->size; 1 分 && 2 分; 1 分)
h->data[i] = 2 分;
h->data[i] = 1 分 ;
return 1; // success
}
int main(){
/* main仅为示例,实际使用以上代码中两个函数的情况可能有所不同 */
struct Heap *h;
h = initHeap( 100 );
insertIntoHeap(h, 2018);
return 0;
}
分数 7
循环队列操作
作者 周强
单位
本题要求实现循环队列的入队、出队操作。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10 // 队列结构体中的数组大小,以10为例,实际测试数据不一定为10
struct Queue{
// 队列结构体
int data[MAXSIZE]; // 队列元素数组
int front;
int rear;
};
/* 以下是入队操作,若队列未满,将元素x插入队列、返回1;若队列满,返回0 */
int EnQ(struct Queue *pq, int x){
if( 1 分 )
return 0; // 队列满,返回0
pq->rear = 1 分 ;
1 分