做了《数据结构》MOOC的期中考试,感觉还是有很多知识需要学习,现将考试题目整理如下:
1-1用邻接矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。 (3分)
1-2所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。 (2分)
1-3如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G中一定有回路。 (3分)
1-4算法可以没有输入,但是必须有输出。 (2分)
1-5将一棵完全二叉树存于数组中(根结点的下标为1)。则下标为23和24的两个结点是兄弟。 (3分)
1-6已知一棵二叉树的先序遍历结果是ABC, 则CAB不可能是中序遍历结果。 (3分)
1-7在一棵二叉搜索树上查找63,序列39、101、25、80、70、59、63是一种可能的查找时的结点值比较序列。 (3分)
1-8若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。 (3分)
1-9若一棵平衡二叉树的所有非叶结点的平衡因子都是0,则其必为完美二叉树。(3分)
1-10在具有N个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。 (3分)
参考答案:TFFTF TFTTF
自己错了第6题,看成CBA了
2-1假设有5个整数以1、2、3、4、5的顺序被压入堆栈,且出栈顺序为3、5、4、2、1,那么为了获得这样的输出,堆栈大小至少为: (4分)
A:3
B:4
C:2
D:5
2-2设一段文本中包含4个对象{a,b,c,d},其出现次数相应为{4,2,5,1},则该段文本的哈夫曼编码比采用等长方式的编码节省了多少位数? (4分)
A:4
B:2
C:5
D:0
2-3设 n 是描述问题规模的非负整数,下列程序段的时间复杂度是:(4分)
x = 0;
while ( n >= (x+1)*(x+1) )
x = x+1;
A:O(n2)
B:O(n1/2)
C:O(n)
D:O(logn)
2-4循环顺序队列中是否可以插入下一个元素()。 (4分)
A:只与队尾指针的值有关,与队头指针的值无关
B:与曾经进行过多少次插入操作有关
C:只与数组大小有关,与队首指针和队尾指针的值无关
D:与队头指针和队尾指针的值有关
2-5若某图的深度优先搜索序列是{V1, V4, V0, V3, V2},则下列哪个图不可能对应该序列? (4分)
2-6已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是: (4分)
A:111
B:52
C:39
D:119
2-7下列哪个函数是O(N)的? (4分)
A:(logN)2
B:(NlogN)/1000
C:N2/1000
D:N(logN)2
2-8一棵二叉树中,双分支结点数为15,单分支结点数为30,则叶子结点数为()个。 (4分)
A:17
B:47
C:15
D:16
2-9已知表头元素为c的单链表在内存中的存储状态如下表所示:
现将f存放于1014H处,并插入到单链表中,若f在逻辑上位于a和e之间,则a、e、f的“链接地址”依次
是:(4分)
A:1010H, 1014H, 1004H
B:1010H, 1004H, 1014H
C:1014H, 1010H, 1004H
D:1014H, 1004H, 1010H
2-10将{5, 2, 7, 3, 4, 1, 6}依次插入初始为空的二叉搜索树。则该树的后序遍历结果是:(4分)
A:1, 4, 3, 2, 6, 7, 5
B:1, 4, 2, 6, 3, 7, 5
C:1, 2, 3, 4, 6, 7, 5
D:5, 4, 3, 7, 6, 2, 1
2-11在将数据序列( 6, 1, 5, 9, 8, 4, 7 )建成大根堆时,正确的序列变化过程是:(4分)
A:6,9,5,1,8,4,7 → 6,9,7,1,8,4,5 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5
B:6,9,5,1,8,4,7 → 9,6,5,1,8,4,7 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5
C:6,1,7,9,8,4,5 → 7,1,6,9,8,4,5 → 7,9,6,1,8,4,5 → 9,7,6,1,8,4,5 → 9,8,6,1,7,4,5
D:6,1,7,9,8,4,5 → 6,9,7,1,8,4,5 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5
2-12在并查集问题中,已知集合元素0~8所以对应的父结点编号值分别是{ 1, -4, 1, 1, -3, 4, 4, 8, -2 }(注:−n表示树根且对应集合大小为n),那么将元素6和8所在的集合合并(要求必须将小集合并到大集合)后,该集合对应的树根和父结点编号值分别是多少? (4分)
A:4和-5
B:8和-5
C:1和-6
D:8和-6
参考答案:BBBDC AADDA DA
自己错了第3、6题,第三题注意是开根的时间复杂度,第六题注意要审题,叶子节点是8个,还有可能有非叶子节点,另外对11题的为什么选择D还不是特别清楚
1、下列代码的功能是从一个大顶堆H的某个指定位置p开始执行下滤。
void PercolateDown( int p, PriorityQueue H )
{
int child;
ElementType Tmp = H->Elements[p];
for ( ; p * 2 <= H->Size; p = child )
{
child = p * 2;
if ( child!=H->Size && _____________________(6分) )
child++;
if ( H->Elements[child] > Tmp )
_____________________(6分);
else break;
}
H->Elements[p] = Tmp;
}
参考答案:
H->Elements[child+1]>H->Elements[child]
H->Elements[p]=H->Elements[child]
不知道为什么提交后三个测试点一个显示部分正确,一个显示正确,一个显示编译错误?
5-2
下列代码的功能是返回带头结点的单链表L的逆转链表。
List Reverse( List L )
{
Position Old_head, New_head, Temp;
New_head = NULL;
Old_head = L->Next;
while ( Old_head ) {
Temp = Old_head->Next;
_____________________(6分);
New_head = Old_head;
Old_head = Temp;
}
_________________(6分);
return L;
}
参考答案:
Old_head->Next=New_head
L->Next=New_head