学科、专业名称:网络空间安全
研究方向:网络空间安全083900
考试科目名称及代码:数据结构830
考生注意:所有答案必须写在答题纸(卷)上,写在本试题上一律不给分。
一、 单项选择题 (每题2分,共20分)
-
下列程序段的时间复杂度是 ( )。
void func(int n){ int i = 0,m = 0; while(m < n * n){ i++: m=m+i; } }
A. O(n)
B. O(logn)
C. O(nlogn)
D. O(n2)
-
设p指向一个非空双向链表中的某个结点,将一个q所指新结点插入到该双向链表中,使其成为p所指结点的前驱结点,能正确完成此要求的语句段是 ( )。
A. q->next=p; q->prior=p->prior; p->prior=q; p->prior->next=q;
B. p->prior=q; q->next=p; p->prior->next=q; q->prior=p->prior;
C. q->prior=p->prior; q->next=p; p->prior->next=q;p->prior=q;
D. q->prior=p->next; q->next=p; p->prior->next=q; p->prior=q;
-
一个栈的入栈序列为1,2,3,···,n,其出栈序列是pi,p2,p3,···,Pn。若p1=4,则p3可能取值的个数是多少?()
A. n-3
B. n-2
C. n-1
D. 无法确定
-
二维数组SA中,每个元素的长度为3个字节,行下标 i 从0到7,列下标 j 从0到9,从首地址SA开始连续存放在存储器内,且采用行优先顺序存储,元素A[4][5]的起始地址为 ( )。
A. SA+141
B. SA+111
C. SA+135
D. SA+165
-
一棵度为4的树 T 中,若有10个度为 4 的结点,20个度为 3 的结点,1个度为2的结点,12个度为1的结点,则树 T 的叶子结点个数是 ( )。
A. 63
B. 81
C. 105
D. 72
-
设森林 F 中有 4 棵树 T1,T2,T3,T4,其结点个数分别为 10、15、12、19,将森林 F 转换成一棵二叉树BT,BT 的根结点 R 为 T1 上的结点,则 R 的左子树上的结点个数是 ( )。
A. 9
B. 10
C. 19
D. 27
-
设哈夫曼编码的长度不超过4,若已对两个字符编码为 1 和 01,则最多还可对( )个字符编码。
A. 2
B. 3
C. 4
D. 7
-
下列四个序列中,哪一个是堆 ( )。
A. 65,55,40,10,30,25,20,15
B. 65,55,30,15,25,40,20,10
C. 65,40,55,10,25,30,20,15
D. 65,55,40,30,15,25,20,10
-
在含有33个结点的二叉排序树上,查找关键字为34的结点,以下 ( ) 是可能的关键字比较序列?
A. 25,37,16,45,34
B. 45,37,16,25,34
C. 45,25,16,37,34
D. 16,37,25,45,34
-
序列(5,3,12,9,4,2,10.6,8)是某排序方法第一趟后的结果,该排序算法可能是()。
A.冒泡排序
B.堆排序
C.归并排序
D.简单选择排序
二、填空题(每空2分,共20分)
-
线性结构中元素之间存在一对一关系,树型结构中元素之间存 ( ) 关系,图型结构中元素之间存在 ( ) 关系。
-
高度为3的满二叉树B(设根结点为第一层),将其还原为森林T,其中包含根结点的那棵树中有 ( ) 个结点。
-
采用邻接矩阵的方法存储图时,查找图的某一条边的时间复杂度是 ( ) 。
-
已知序列(12,18,4,3,6,13,2,9,19,8),采用快速排序对该序列作升序排序的第一趟结果是 ( ) 。
-
设G为具有37条边的无向连通图,则G至少有 ( ) 个顶点,至多有 ( ) 个顶点。
-
含有n个顶点e条边的无向连通图,利用Prim算法生成最小生成树的时间复杂度为 ( ) 。
-
一棵二叉树的后序序列为CEFAKHGBD,中序序列为CAEFDKBGH,则先序序列为 ( ) 。
-
若使用二叉链表作为树的存储结构,在有n个结点的二叉链表中空链域的个数为 ( ) 。
三. 判断题(每题2分,共20分,正确的选T,错误的选F)
-
数据的逻辑结构包括顺序结构和链式结构两种类型。 ( )
-
队列的链式存储结构和顺序存储结构相比,其中一个优点是节省了存储空间。 ( )
-
一棵二叉树的每个结点有且仅有一个前驱结点。 ( )
-
采用邻接表的方式存储一个图,结果可能是不唯一的。 ( )
-
在一个AOE网中,一个关键活动提前完成,另一个关键活动延期完成,那么整个工程有可能会按时完成。 ( )
-
Dijkstra算法除了用来求一个带权有向图中两个顶点之间的最短路径之外,还可以用来判定图中是否存在回路。 ( )
-
在一个拓扑有序序列中,任意两个相继的结点之间在对应的图中都存在一条路径。 ( )
-
堆排序算法中,当待排记录初始序列已经为按关键字顺序有序时,其时间复杂度将从O(nlogn)蜕化到O(㎡),其中n为序列中元素的个数。 ( )
-
线索二叉树中一个结点的左线索指向的是该结点的双亲结点。 ( )
-
对大顶堆进行层次遍历可以得到一个有序序列。 ( )
四、简答题(共40分)
-
简述创建线索二叉树的目的,以及建立线索二叉树的思路。(4分)
-
给定关键字序列T=(11,13,12,14,5,6,8,7,9,10),采用快速排序算法,以第一个元素为枢轴,对该序列由小到大排序,并写出具体排序过程,要求给出每趟排序后的中间结果。(3分)
-
对于给定11个数据元素的有序表T={2,3,10,15,20,25,28,29,30,35,40}采用折半查找,请回答以下问题。(本题共三小题,前两小题各2分,第三小题4分,共计8分)
(1)若查找给定值为20的元素,将依次与表中哪些元素比较?
(2)若查找给定值为26的元素,将依次与哪些元素比较?
(3)假设查找表中每个元素的概率相同,求查找成功时的平均查找长度和查找不成功时的平均查找长度
-
设有一段正文由字符集{A. B,C,D. E. F)组成,正文长度为100个字符,其中每个字符在正文中出现的次数分别为17,12,5,28,35,3。若采用Huffman编码对这段正文进行压缩存储,请完成如下问题。(本题共四小题,每小题各2分,共计8分)
(1)根据上述背景,构造出Huffman树(规定权值较小的结点为左子树)。
(2)给出每个字符的Huffiman编码。
(3)若有某一段正文的二进制编码序列为01101010110011,请将它翻译成所对应的正文。
(4)计算按Huffman 编码压缩存储这段正文共需要多少个字节。
-
已知一个有向网G的带权邻接矩阵如下所示,回答以下问题。(本题共两小题,第一小题2分,第二小题5分,共计7分)
(1) 画出该带权有向图(假设顶点编号为VO,VI,V2,V3,V4,V5).
(2) 使用Dijkstra(迪杰斯特拉)算法求出从顶点VO到其余各顶点的最短路径,并写出过程。
-
已知一个无向图如下图2所示,分别用Prim和Kruskal 算法生成最小生成树,要求画出构造过程(设Prim算法以顶点V1为起点)。(10分)
五、算法填空(共2小题,每空2分,共20分)
-
下面是先序遍历二叉树的非递归算法,请在空白处填上适当内容,使其成为一个完整算法。
typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild: } BiTNode, *BiTree; void PreOrderTraverse(BiTree T, Status (*Visit)(TElemType)) { BTNode *p; SqStack *st; InitStack(st); if (T != NULL) { Push(st, T); while (______) { ______ Visit(p->data); if (p->rchild != NULL) ______ if (______) ______ } } }
-
给定一个带头结点的双向链表L,至少包含一个数据结点。以下代码为实现将L中所有结点按照数据值递增有序排列,排序算法为直接插入排序法,请将代码中空白处填写完整。
typedef struct DiLNode { ElemType data; struct DiLNode *prior; struct DiLNode *next; } DilNode.*DiLinkList; void sort(DiLNode *&L) { DiLNode *p, *pre.*q; p = L->next->next; L->next->next = NULL; while (p != NULL) { q = p->next; pre = L; while (pre->next != NULL && pre->next->data < p->data) pre = pre->next; ______ if (pre->next != NULL) ______ ______ ______ ______ } }
六、编写算法(共3小题,每小题10分,共30分)
-
设有一个长度为n的线性表L采用顺序存储结构存储。设计一个算法,以第一个元素为分界线(基准),将所有小于或等于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面。要求算法的时间复杂度为O(n),且算法最多只能借助1个辅助变量。
-
设图G有n个顶点,按照如下提示设计一个算法,将G的邻接矩阵转换为对应的邻接表。G的邻接表存储类型定义如下:
typedef struct Anode { int adjvex; struct ANode *nextarc; InfoType weight; } ArcNode; typedef struct Vnode { Vertex data; ArcNode *firstac; } VNode; typedef struct { VNode adjlist[MAXV]; int n, e; } AdjGraph;
G的邻接矩阵存储类型定义如下:
typedef struct { int no; InfoType info; } VertexType; typedef struct { int edges[MAXV][MAXV]; int n, e; VertexType vexs[MAXV]; } MatGraph:
-
一个公司在某地区有n个产品销售点,现打算在这个地区的某个销售点上建一个中心仓库,负责向该地区的各个销售点提供销售产品。由于运输线路和公交条件不同,向每个销售点运输一次产品的费用也不相同。若公司每天都会向每个运输点运输一次产品,试设计一个算法,以帮助公司解决应将中心仓库建立在哪个销售点上才能使运输费用达到最低的问题。