数据结构测试试卷及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
得分
一、单项选择题(10 小题,每小题 2 分,共 20 分)
1.设栈 S 和队列 Q 的初始状态为空,元素 e1,e2,e3,e4,e5,e6 依次通过栈 S,一个元素出栈后即进入队列 Q,若 6 个元素出队的顺序是 e2,e4,e3,e6,e5,e1,则栈 S 的容量至少应该是()。
B
A.2B.3C.4D.6
2.由 4 个叶子结点构造一棵哈夫曼树,该树的总结点数是(A.4 B.5 C.6D)。
D.7
3.对于长度为m(m>1)的指定序列,通过初始为空的一个栈、一个队列后,错误的叙述是)。
(D
A.若入栈和入队列的序列相同,则出栈序列和出队序列可能相同
B.若入栈和入队列的序列相同,则出栈序列和出队序列可以互为逆序
C.入队序列与出队序列关系为1:1,而入栈序列与出栈序列关系是1: n (n≥1)
D.入队序列与出队序列关系为1: n (n≥1),而入栈序列与出栈序列关系是1:1
4.在一个单链表 HL 中,若要删除由指针 q 所指结点的后继结点,则执行(A)。
A.p=q->next; q->next=p->next; C.p=q->next; p->next=q->next;B.p=q->next; q->next=p;
D.q->next= q->next->next; q->next=q;
5.假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女之间不能相互继承。
则表示该遗产继承关系的数据结构应该是()。
A.树B.图C.线性表D.集合
B
6.设数组 S[n]作为两个栈 S1 和 S2 的存储空间,对任何一个栈只有当 S[n]全满时才不能进行进栈操作。
为这两个栈分配空间的最佳方案是(
A.S1 的栈底位置为 0,S2 的栈底位置为n-1
B.S1 的栈底位置为 0,S2 的栈底位置为n/2
C.S1 的栈底位置为 0,S2 的栈底位置为n
D.S1 的栈底位置为 0,S2 的栈底位置为 1
A)。
7. 下面说法中不正确的是( D )。
A .对称矩阵只须存放包括主对角线在内的下(或上)三角的元素即可
B .对角矩阵只须存放非零元素即可
C .稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储
D .稀疏矩阵中大量值为零的元素分布有规律,因此可以采用三元组表方法存储所需空间与线 性表长度成正比
8. 为 5 个使用频率不等的字符设计哈夫曼编码,不可能的方案是( A )。
A .100,11,10,1,0
B .111,110,10,01,00 D .001,000,01,11,10
C .000,001,010,011,1
9. 已知一棵二叉树的结点数为 n,若该二叉树无度为 1 的结点,则该二叉树的叶子结点数为 (
D
)。
A . n
B .n -1
C .(n -1)/2
D .(n+1)/2
B
)的顺序求源点到各顶点 10. 求单源最短路径的迪杰斯特拉(Dijkstra )算法是按( 的最短路径的。
A .路径长度递减
B .路径长度递增
C .顶点编号递减
D .顶点编号递减
二、 得分
(8 分)试给出下面稀疏矩阵 A 的三元组表示。
下标从 0 开始。
0 2 1 0 4 8 2 1 4 2 3 3 3 0 6 4 5
5 1 2 5
7 6 前 7 行:5 分 后 3 行:3 分
7
得分
三、 (8 分)已知一个连通图如图 1 所示,试给出图的邻接矩阵示意图,若从顶
点 v 1 出发对该图进行遍历,分别给出基于存储结构的深度优先遍历的顶点序列和广度优先 遍历的顶点序列。
0 1 0 1 0 1
1 0 1 1 1 0
1 0 0 1 0a rc[6][6]=
1 1 0 0 1 1 0 1 1 1 0 0 1 0 0 1 0 0
图 1
V[6]={v1,v2,v3,v4,v5,v6} DFS: v1 v2 v3 v5 v4 v6
BFS: v1 v2 v4 v6 v3 v5 各 2 分
得分
四、 (8 分) 图 2 是一个无向网图,请按 Kruskal 算法,给出求最小生成树的过程。
图 2
解:
a
b
f
a
c
b
a
c
b f
a
c
b
f
1
2
1
1
2
d
e
d e
d
e d
e
3
f
c
(a ) 初始状态 (b) 边(b,d)加入 (c) 边 (e,f)加入 (d) 边(a,c)加入
a
b
a
b
5
1
2
1
2
d
d
e
5
5
3
3
e
f
f
c
c
(e) 边(b,f)加入
(a)和(d)2 分,其余各步个 1 分
(f) 边(a,b)加入
五、 得分
(8 分)试由权值为 29、12、15、6、23 的五个叶子结点构造一棵哈夫曼树,
并求其带权路径长度 WPL 。
解:
6
12 15 23 29 15
18
23 85
29 23 29
33
6
12
18
15
6
12
33
52 18
33
52 15
23 29
6
12
15
18
23
29
6
12
写出结果 4 分,前面 4 步每步 1 分
六、得分(8 分)已知模式 T=”abaabcab”,求其对应的 next[0..7]的值。
next
01234567
-1 0 0 1 1 2 0 1一个 1 分
得分
七、(8 分)为便于存储和处理一般树结构形式的信息,常采用孩子—兄弟表
示法将其转换成二叉树(左孩子关系表示父子、右孩子关系表示兄弟),将下图所示的树转换成对应的二叉树是。
1
11
32
3
23424
54
7
567
5667
图 3
(a) 加线(b) 去线(c) 层次调整
直接写出结果 4 分
前 2 步每步 2 分
得分
八、(8 分)已知某二叉树的中序、层序序列分别为 DBAFCE、FDEBCA,请
构造该二叉树,并给出该二叉树的后序序列。
评分:二叉树构造:5 分,后序遍历序列:3 分
二叉树如下所示;后序序列:ABDCEF
得分
九、(8 分)用容量为n 的顺序表(n:0~3)表示一个循环队列Q,Q.front
为队头元素的前一个位置,Q.rear 为队尾元素位置,填写循环队列 Q 在下列运算中队列头和尾变化的情况。
Q.front Q.rear
初始状态E1 进队出队0
1
1
1
2
2
1
1
2
3
3
E2 进队
E3 进队
出队
E4 进队
得分
十、算法设计题(2 小题,每小题 8 分,共 16 分)1.设一个二叉树以二叉链表为存储结构,结点结构为:
struct node
{int data;
struct node lchild,rchild;
};
设计算法按前序遍历次序输出二叉树中的叶子结点。
int PreOrder(BiNode *root) //root 为根结点
{if(root==NULL) return 0;
else
{
if(root->lchild==NULL && root->rchild==NULL)
return 1;
else
return PreOrder(root->lchild)+PreOrder(root->rchild);
}
}
2.设单链表的结点结构如下:
template<class T>
struct Node{
T data;
Node<T> *next;
};
设计算法,统计带头结点的单链表HL 中结点值为数字字符的结点个数。
int statsNN(Node<char> *HL)
{
Node<char> *p=HL->next;
int count=0;
while(p)
{
if(p->data>=’0’ && p->data<=’9’)
count++;
p=p->next;
}
return count;}。