本文章仅仅是对《南昌大学2014~2015学年第二学期数据结构期末考试试卷》进行讲解,更加详细的内容均会附上链接,以便查阅和版权保护。同时试题已经以资源的形式上传至CSDN资源下载界面,如果有需要可以自行下载
一、单选题
-
算法分析的两个主要方面是____________。
A. 空间复杂度和时间复杂度 B. 正确性和简单性
C. 可读性和文档性 D. 数据复杂性和程序复杂性
此题答案为A
[解析] 时间复杂度和空间复杂度是衡量算法好差的重要指标,正确性和简洁性、可读性和可运行性是从软件工程角度要求系统实现的目标。 -
一个顺序表,第一个元素的存储地址是1000,每个元素的长度为4,则第10个元素的地址是_______。
A. 1040 B. 1044
C. 1036 D. 1020
此题答案为C
[解析]第十个意味着前面有9个元素占据了存储空间,即第十个元素的地址应该是1000+9*4=1036。 -
带头结点的单链表head为空的判定条件是______。
A. head = = NULL; B. head->next = = NULL;
C. head->next = = head; D. head! = NULL;
此题答案为B
[解析]带头结点的单链表,头结点是固定存在的,其next域指向链表的第一个元素,如果next域为空,说明链表中没有元素,即为空。 -
从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较_____个结点。
A. n; B. n/2;
C. (n-1)/2; D. (n+1)/2;
此题答案为D
[解析]此题原理是元素的遍历,算法为求和公式计算,即从1加到求和后再除以总数,得出平均值,结果为[(1+n)*n/2]*n=(n+1)/2. -
对稀疏矩阵进行压缩存储的目的是__________________。
A.便于进行矩阵运算 B.便于输入和输出
C.降低运算的时间复杂度 D.节省存储空间
此题答案为D
[解析]稀疏矩阵比较基本的定义是矩阵中的大多数元素为零,并且可以利用零元素节约大量存储、运算和程序运行时间。 -
若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为 _____________。
A.n=i B.n-i+1 C.i D.不确定
此题答案为B
[解析]栈的存储遵循先进后出的原则,依题意,输出序列的下标加上入栈序列之和为n+1,由p的下标为i可计算出结果为n+1-i。 -
队列操作的原则是_____________。
A. 先进先出 B. 后进先出 C. 只能进行插入 D. 只能进行删除
此题答案为A
[解析]由队列的基本定义可得出 -
假定在一棵二叉树中,双分支结点数为30,单分支结点数为23个,则叶子结点数为___________个。
A.23 B. 24 C. 30 D.31
此题答案为D
[解析]二叉树的节点为n2+1,即双分支节点数+1,提供的单分支节点数仅为干扰项, -
深度为6的二叉树至多有___________个结点。
A. 31 B. 32 C. 64 D. 63
此题答案为D
[解析]深度为n的二叉树,底层至多有2n-1个节点,每往上一层便为下一层的一半。而根数为一,即总数为1+2+4+……+2n-1,将n为6带入,结果为63. -
以下说法错误的是______________。
A.存在这样的二叉树,对它采用任何次序遍历其结点访问序列均相同。
B. 二叉树的度为2。
C. 由树转换成二叉树,其根结点的右子树总是空的。
D. 在二叉树只有一棵子树的情况与也要明确指出该子树是左子树还是右子树。
此题答案为B
[解析]B项错误较为明显;A项,如果是只有一个根节点,那么任何遍历访问序列相同;C项,拆掉右边的线,兄弟之间连线,旋转45度;D项,由定义,正确 -
具有n个顶点的有向图最多有_________条边。
A.n(n-1)/2 B. n(n-1) C. n(n+1) D. n(n+1)/2
此题答案为B
[解析]具有n个节点的图,最多有n(n-1)/2条边,此题为有向图,既结果为n(n-1) 条边 -
如果结点A有4个兄弟,而且B是A的双亲,则B的度是__________。
A. 3 B. 4 C. 5 D. 6
此题答案为C
[解析]A有四个兄弟,且B是A的双亲意味着B有5个儿子,则B的度为5. -
在一个图中,所有顶点的度数之和等于所有边数的____________倍。
A.1/2 B.1 C.4 D.2
此题答案为D
[解析]因为一条边可用于两个节点的度数,所以是两倍。 -
用顺序存储的方法将完全二叉树中的所有结点逐层存放在数组R[1…n]中,结点R[i]若有左子女,
则左子女是结点___________________。
A.R[2i+1] B. R[2i-1] C. R[i/2] D. R[2i]
此题答案为D
[解析]由顺序存储完全二叉树的定义可知,节点i的左子女为2i,右子女为2i+1. -
二维数组A中,每个元素的长度为4个字节,行下标i从0到9,列下标j从0到7,从首地址A开始连续存放在存储器内,该数组按行存放时,数组元素A[5][4]的起始地址为___________。
A. A+80 B. A+84 C. A+180 D. A+176
此题答案为D
[解析]在二维数组存储时,如果是按行存储,则会填满A的前面所有的行,再填满A所在行的前面位置,故应填满(8*5+4)个空间,即44个元素空间,而每个元素的长度为4个字节,故共需填满176个字节,便可得出答案为D
二、填空题
-
数据的存储结构有4种,包括__________________,索引存储结构和_________, _____________。
答案为 顺序存储结构 链式存储结构 散列存储结构 (无序) -
在一个单链表中,指针p所指结点为最后一个结点的条件是__________________________。
答案为 p->next==NULL
[解析]由单链表的属性可知 -
在一棵二叉树中,第5层上的结点数最多为________________。
答案为 16
[解析]由选择题第九题的解析可知 -
将一棵树转换成二叉树后,根结点没有_________子树。
答案为 右
[解析]由第十题C选项的解析可知 -
在一个具有n个顶点的有向图中,要强连通全部顶点至少需要___________条边。
答案为 n
[解析] 对于强连通,有向图是n,无向图是n-1 。 -
有向图G用邻接矩阵A[1…n][1…n]存储,则顶点i的入度等于A中 __________ 。
此题答案为 第i列非0元素的个数或第i列元素之和
[解析]由联通矩阵的定义可知。 -
在一个长度为n的向量中的第i个元素(1≤i≤n)之前插入一个元素时,需向后移动_______个元素。
此题答案为 n-i+1
[解析]在第i个元素之前插入一个元素,相当于从第i个元素开始整体后移一位,即求i到n之间的元素数,为 n-i+1 -
两个串相等的充分必要条件是__________
此题答案为 两个串的串长相等且各个对应位置的字符都相等
三、应用题
-
如果进栈序列是A、B、C,写出所有可能的出栈序列。
答案为 Abc acb bac bca cba (一个1分)
[解析](自己画的图,不怎么美观。。。。)
由左上可看出CBA准备进栈
1:CB准备进栈,A已经进栈,当A进栈立即出栈,且BC也是这样的时候,输出队列为ABC
2:A已经出栈,BC都在栈中未出,而后上端的C先出栈,B后出栈,输出为ACB
3:AB进栈,C在外面,上端的B出栈,A而后出栈,C最后进栈出栈,输出为BAC
4:A进栈不出栈,B进栈马上出栈,C进栈,而后C出栈,A最后出栈,输出为BCA
5:ABC全部进栈,依次出栈,输出为CBA。 -
设有数据结构(D,R),其中
D={ d1, d2, d3, d4, d5 }
R={ r1, r2 }
r1={ <d1,d2>,<d2,d3>,<d1,d4>,<d2,d4>,<d3,d5>,<d5,d2>,<d4,d5> }
r2={ (d1,d2), (d1,d3), (d1,d4), (d2,d4), (d2,d3), (d3,d5), (d4,d5) }
试绘出这2个逻辑结构示意图。
[解析] 数据结构B=(D,R),其中B,D,R分别称为什么:
B表示数据结构D表示数据元素的集合R表示数据元素之间的关系 -
无向带权图如下所示,写出其邻接矩阵,并画出其最小生成树。
邻接矩阵为邻接矩阵为:
A B C D E F G H
A 0 6 3 15 0 0 0 0
B 6 0 0 0 21 0 0 8
C 3 0 0 0 0 0 0 19
D 15 0 0 0 17 16 36 14
E 0 21 0 17 0 13 0 0
F 0 0 0 16 13 0 18 0
G 0 0 0 36 0 18 0 12
H 0 8 19 14 0 0 12 0
此图的计算为如连通则有值,且值为权值
最小生成树为:
这个在离散数学中有讲,数据结构中只是讲了一种其他的算法,在此不做讲解。 -
已知某二叉树的中序序列为DCBGEAHFIJK,后序序列为DCEGBFHKJIA。请画出该二叉树。
此题答案为
[解析] 解法如上图,
1:首先确定中序遍历为左根右,后序遍历为左右根,根据后序遍历可得出,根为A
2:由根为A可知,在中序遍历中,DCBGE为左子树,又由后序遍历左子树为DCEGB可知,DC为左子树的左子树,即为最左下的两个。
3:当左子树的左子树确定,由后序遍历可知,B为根节点
4:再由中序是GE,后序是EG可知,G为右子树的根节点,E为右子树的右子树
5:由剩下的右子树对应的后序,可知右子树的根节点为I
6:由根节点为I,得出HF为右子树的左子树的中序遍历,FH为右子树的左子树的后序遍历,算法与4相同,
7:算法和4,6相同。 -
已知稀疏矩阵A5*5如下:A=
用三元组表作为存储结构,写出相应的三元组表示意图。(下标从0开始)
(5 5 7)
(0 2 5)
(1 0 1)
(1 4 8)
(3 2 6)
(3 3 3)
(4 1 2)
(4 4 9)
此题由三元组的性质可得,不做讲解。 -
设有一段正文是由字符集{A,B,C,D,E,F}组成的,正文长度为100个字符,其中每个字符要正文中出现的次数分别为17,12,5,28,35,3。若采用哈夫曼编码对这段正文进行压缩存储,请完成如下的工作:
(1)构造哈夫曼树(规定权值较小的结点为左子树);
(2)写出每个字符的哈夫曼编码;(编码时,左子树取0 ,右子树取1)
(3)若有某一段正文的二进制编码序列为01101010110011,请按(2)的哈夫曼编码将它翻译成所对应的正文。
(1)
[解析]由图,
1:将次数进行排序,由小到大
2:将最小的两个数相加,并将它们的和添加至数列中
3,4,5:重复步骤2
最后将树图按照左边小的原则进行排序。可得出最后的结果。
(2)
这个图有点潦草,大致意思就是将对应的元素进行排序,左为0,右为1.
可得出每个字符哈夫曼编码:A:00,B:011,C:0101,D:10,E:11,F:0100
(3)由第二题的结果可推算出正文:BCBAE
四、算法阅读题
-
假设下面程序里的栈S已经初始化,经过下面这段程序处理后,写出屏幕上的输出结果。(假设栈已经初始,且栈最多可以存放100个元素)(程序中函数push()为压栈;pop()为出栈;StackFull()为判栈满;StackEmpty()为判栈空)
void Demo(Stack S)
{
int i;
int x;
for(i=1;i<8;i++)
if(!StackFull(S)) push(&S,i4+2);
else
Error(“Stack is full”);while(!StackEmpty(S))
{
x=pop(&S);
printf("%8d",x);
}
}
输出结果为___________________________________________________
此题答案为 30 26 22 18 14 10 6
[解析]此题的意思就是i的循环,每经过一个循环就将i加1,并将i*4+2的值存储在栈中,当栈值进行最后一个存储溢出时,退出循环,并将进入栈的元素输出,(包括使栈溢出的那个值) -
在一个双向链表中p所指结点之前插入一个由指针s所指结点,可执行以下操作:
s->next=________________________;
s->prior=________________________;
p->prior->next=s;
p->prior=________________________;
此题答案为
p
p->prior
S
[解析]这个由最基础的双向链表可得出最后的最后~ 祝大家考试顺利~