2017 年广东暨南大学数据结构考研真题
学科、专业名称:计算机科学与技术、软件工程
研究方向:计算机系统结构 081201,计算机软件与理论 081202,计算机应用技术 081203,
软件工程 083500,计算机技术(专业学位) 085211,软件工程(专业学位) 085212
考试科目名称及代码:数据结构 830
考生注意:所有答案必须写在答题纸(卷)上,写在本试题上一律不给分。
一、 单项选择题(每题 2 分,共 30 分)
1. 一个队列的入列序列是 1,2,3,4, 则队列的输出序列是(
)。
A.
4,3,2,1
B.
1,2,3,4
C.
1,4,3,2
D.
3,2,4,1
2. 循环队列用数组 A[0..m-1]存放其元素值,已知其头尾指针分别是 front 和 rear, 则当
前队列中的元素个数是(
)。
A.
(rear-front+m)%m
B.
rear-front+1
C.
rear-front-1
D.
rear-front
3. 平衡二叉树的平均查找长度是(
)。
A.
O(n2)
B. O(nlog2n)
C.
O(n)
D.
O(log2n)
4. 设 F 是由 T1、T2 和 T3 三棵树组成的森林,与 F 对应的二叉树为 B,T1、T2 和 T3 的结点
数分别为 N1、N2 和 N3,则二叉树 B 的根结点的左子树的结点数为(
)。
A.
N1-1
B.
N2-1
C.
N2+N3
D.
N1+N3
5. 计算机内部数据处理的基本单元是(
)。
A. 数据
B. 数据元素
C. 数据项
D. 数据库
6. 设按照从上到下、从左到右的顺序从 1 开始对完全二叉树的结点进行顺序编号,则编号
为 i 结点的左孩子结点的编号为(
)。
A.
2i+1
B.
2i
C.
i/2
D.
2i-1
7. 设用邻接矩阵 A 表示有向图 G 的存储结构,则有向图 G 中顶点 i 的入度为(
)。
A. 第 i 行非 0 元素的个数之和
B. 第 i 列非 0 元素的个数之和
C. 第 i 行 0 元素的个数之和
D. 第 i 列 0 元素的个数之和
8. 设一组初始记录关键字序列为(16, 25,12, 30,47,11, 23,36, 9,18,31),则以增量 d=5
的一趟希尔排序结束后的结果为(
)。
A.
11, 23,12, 9, 18,16, 25,36,30, 47, 31
B.
11, 23,12, 9, 16, 18, 25,36, 47, 30,
31
31
C.
16, 23,12, 9, 11,18, 25,36,30, 47, 31
C.
9, 11,12, 16, 18, 23, 25,30, 36, 47,
9. 设某有向图的邻接表中有 n 个表头结点和 m 个表结点,则该图中有(
)条有向边。
A.
n
B.
n-1
C.
m
D.
m-1
10. 设哈夫曼树中的叶子结点总数为 m,若用二叉链表作为存储结构,则该哈夫曼树中总共
有(
)个空指针域。
A.
2m-1
B.
2m
C.
2m+1
D.
4m
11. 对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用 H(K)=K %9
作为散列函数,则散列地址为 1 的元素有(
)个。
A. 1
B. 2
C. 3
D. 4
12. 下面程序的时间复杂为(
)。
for(i=1,s=0; i<=n; i++) { t=1; for(j=1;j<=i;j++) { t=t*j;s=s+t;}
}
A. O(n)
B.
O(n2)
C.
O(n3)
D.
O(n4)
13. 对于一个具有 n 个顶点的无向连通图,它包含的连通分量的个数为(
)。
A. 0
B.1
C. n
D. n+1
14. 设无向图 G 中边的集合 E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},则
从顶点 a 出发进行深度优先遍历可以得到的一种顶点序列为(
)。
A.
aebcfd
B.
acfebd
C.
aedfcb
D.
aedfbc
15.设指针变量 p 指向双向链表中结点 A,指针变量 s 指向被插入的结点 X,则在结点 A 的后
面插入结点 X 的操作序列为(
)。
A.
p->next=s;s->prior=p; p->next->prior=s; s->prior=p->nest;
B.
s->prior=p;
s->next = p->next; p->next=s; s->next->prior=s;
C.
p->prior=s;p->nest->prior=s;s->prior=p;s->next=p->prior;
D.
s->prior=p;s->next=p->next;p->next=s;p->next->prior=s;
二.填空题(每空 2 分,共 20 分)
1. 采用堆排序、快速排序、冒泡排序,对初态为有序的表,最省时间的是
。
2. 设一组初始记录关键字序列为(49,38,65,97,76,13,27,50),则第 4 趟直接选择
排序结束后的结果为
。
3. 当待排记录序列按关键字顺序有序时,直接插入排序和冒泡排序能达到
的时间复
杂度,快速排序的时间性能退化为
(以第一个关键字为枢轴)。
4. 判定顺序栈是否为空的条件是
,判定顺序栈是否为满的条件
是
。
5. 当向 B-树中插入关键字时,可能引起结点的
,最终可能导致整个 B-树的高
度增加
。
6. 设散列表的长度为 8,散列函数 H(k)=k%7,用线性探测法解决冲突,则根据一组初始关
键字序列(8,15,16,22,30,32)构造出的散列表的平均查找长度是
。
7. 设在一棵度数为 3 的树中,度数为 3 的结点数有 2 个,度数为 2 的结点数有 1 个,度数
为 1 的结点数有 2 个,那么度数为 0 的结点数有
个。
三.判断题(每题 1 分,共 10 分,正确的选 t,错误的选 f)
1. 顺序表查找指的是在顺序存储结构上进行查找。(
)
2. 循环队列中不存在队列满的问题。(
)
3. n 阶对称矩阵可压缩存储到 n/2 个单元的空间中。(
)
4. 一个图的邻接表表示法是唯一的。(
)
5. 希尔排序是稳定的。(
)
6. 由树转化成二叉树,该二叉树的右子树不一定为空。(
)
7. 根据拓扑排序结果可以判断一个有向图中是否存在环路。( )
8. 稀疏矩阵的压缩存储可以用一个三元组表来表示稀疏矩阵中的非 0 元素。(
9. 入栈操作和入队列操作在链式存储结构上实现时不需要考虑栈溢出的情况。(
)
)
10.数据元素是数据的最小单位。(
)
四. 简答题(45 分)
1. 设有 1000 个元素组成的无序序列,希望用最快的速度挑选出其中前 10 个(仅挑前 10
个)最大元素,以下几种排序方法中哪一种最合适?分析各排序算法, 给出原因?(7 分)
(1)简单选择排序; (2)冒泡排序; (3)堆排序; (4)归并排序
2. 设二叉排序树中关键字由 1 至 1000 的整数组成,现要查找关键字为 363 的结点,下面的
关键字序列哪个不可能是在二叉树中查到的序列?说明原因。(5 分)
(1)51,
250, 501,
390, 320,
340,
382,
363
(2)24,877, 125,
342,
501, 623, 421,
363
3. 针对二叉树,回答以下问题:
(1)具有 n 个结点的二叉树的最小深度是多少?最大深度是多少?(4 分)
(2)具有 n 个结点的完全二叉树中有多少个叶子结点?有多少个度为 2 的结点?(4 分)
(3)具有 n0 个叶子结点的完全二叉树中共有多少个结点?(4 分)
4. 阅读如下程序,写出此程序的输出结果(其中栈的元素类型为char)。(5分)
void main ( )
{
Stack S;
char x, y;
InitStack(S);
x='y';
y='s' ;
Push(S,x);
Push(S,y);
Pop(S,x);
Push(S,'k');
Push(S,x);
while(!StackEmpty(S))
{Pop(S,y);
printf(y);}
}
5. 给定图1所示带权有向图,利用Floyd算法,求每一对顶点之间的最短路径及其路径长度
(要求写出求解过程)。(10分)
图 1
6. 一个带权无向图的最小生成树是否一定唯一?在什么情况下构造出的最小生成树可能不
唯一?(6 分)
五.算法填空(共 2 小题,每空 2 分,共 20 分)
1. 下面的算法是在带头结点的单链表 L 中第 i 个位置之前插入元素 e。请在__________
处填上适当内容,使其成为一个完整算法。
typedef
struct
LNode{
ElemType
data;
struct
LNode
*next;
}LNode, * LinkList;
Status ListInsert_L (LinkList & L, int i, ElemType e)
{
p=L;
j=
(1)
;
while (p && (j< i-1)) { p=p->next;
(2)
}
if (!p )
return
ERROR;
s=(LinkList)malloc(sizeof (LNode));
s->date = e;
;
(3)
(4)
return
Ok ;
}
2. 下面是一个有向图 G 采用邻接表存储结构的拓扑排序算法。请在________处填上适当内
容,使其成为一个完整算法。
typedef struct VNode {
VertexType
data;
ArcNode
*firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct ArcNode {
int
adjvex;
struct
ArcNode
*nextarc;
InfoType
*info;
} ArcNode;
typedef struct {
AdjList vertices;
int
vexnum,
arcnum;
int
kind;
} ALGraph;
Status TopologicalSort(ALGraph G) {
// 有向图 G 采用邻接表存储结构。若 G 无回路,则输出 G 的顶点的一个拓扑序列并返回
OK,否则返回 ERROR。
int indegree[vexnum];
FindInDegree(G, indegree); //对各顶点求入度 indegree [0..vexnum-1]
InitStack(S);
for(i=0;
inextarc)
{
k=p->adjvex;
if(!(- -indegree[k]))
(9)
}
}
if(
(10)
) return ERROR;
else return OK;
}//TopologicalSort
六.编写算法(25 分)
1. 编写一个算法求二叉树中叶子结点的个数(10 分)。
2. 已知 n 个顶点的带权图用邻接矩阵表示,试编写算法实现用 kruskal 算法构造最小生成
树。(15 分)