1、课程名称: 数据结构 II1东 北 大 学 继 续 教 育 学 院数据结构 II 试 卷(作业考核 线上) B 卷学习中心: 院校学号: 姓名 (共 页) 总分 题号 一 二 三 四 五 六 七得分一、单选题(每小题 2 分,共 10 小题,20 分)A 1抽象数据类型的三个组成部分分别为A数据对象、数据关系和基本操作B数据元素、逻辑结构和存储结构C数据项、数据元素和数据类型D数据元素、数据结构和数据类型D 2下列各式中,按增长率由小至大的顺序正确排列的是A ,n!,2 n ,n 3/2 Bn 3/2,2 n,n logn,2 100C2 n,log n,n logn,n 3/2 D2 100
2、,logn, 2 n, nnA 3. 已知指针 p 和 q 分别指向某单链表中第一个结点和最后一个结点。假设指针 s 指向另一个单链表中某个结点,则在 s 所指结点之后插入上述链表应执行的语句为A. q-next=s-next;s-next=p; B. s-next=p;q-next=s-next;C. p-next=s-next;s-next=q; D. s-next=q;p-next=s-next;C 4二维数组 A2010采用行优先的存储方法,若每个元素占 2 个存储单元,且第 1个元素的首地址为 200,则元素 A89的存储地址为A374 B576C378 D580B 5设有一个顺序栈
3、的入栈序列是 a、b、c,则 3 个元素都出栈的可能不同排列个数为A4 B5 C. 6 D. 7课程名称: 数据结构 II2D 6. 设树 T 的度为 4,其中度为 1,2,3 和 4 的结点个数分别为 4,2,1,1 则 T 中的叶子数为A5 B6 C7 D8C 7以下说法不正确的是A无向图中的极大连通子图称为连通分量B连通图的广度优先搜索中一般要采用队列来暂存刚访问过的顶点C图的深度优先搜索中一般要采用栈来暂存刚访问过的顶点D有向图的遍历不可采用广度优先搜索B 8. 假设在构建散列表时,采用线性探测解决冲突。若连续插入的 n 个关键字都是同义词,则查找其中最后插入的关键字时,所需进行的比较
4、次数为A. n-1 B. nC. n+l D. n+2B 9设置溢出区的文件是A索引非顺序文件 BISAM 文件CVSAM 文件 D顺序文件A 10. 已知一组关键字为25,48,36,72,79,82,23,40,16,35,其中每相邻两个为有序子序列。对这些子序列进行一趟两两归并的结果是A.25,36,48,72,23,40,79,82,16,35B.25,36,48,72,16,23,40,79,82,35C.25,36,48,72,16,23,35,40,79,82D.16,23,25,35,36,40,48,72,79,82二、填空题(每小题 1 分,共 10 小题,10 分)11.
5、下面程序段中带下划线的语句的执行次数的数量级是(log 2n)。i=1; WHILE(inest=L-next-next;L-next-next =S ) 。13无表头结点的链队列 Q 为空的条件是(Q-real=Q-front=NULL) 。14设 Q0.N-1为循环队列,其头、尾指针分别为 P 和 R,则队 Q 中当前所含元素个数为( R-P+N)% N) 。15一棵含 999 个结点的完全二叉树的深度为( 10 ) 。16在 AOV 网 中,存在环意味着某项活动以自己为先决条件;对程序的数据流图来说,它表明存在( 死循环 )。17. 有向图 G 可拓扑排序的判别条件是( 不存在环 )。1
6、8如果结点 A 有 3 个兄弟,而且 B 是 A 的双亲,则 B 的度是( 4 ) 。19应用回溯与分支限界法解决实际问题时,在搜索过程中利用判定函数,也称为( .限界函数 ) 。课程名称: 数据结构 II320. 若以 1234 作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列是( 4231 )。 三、应用题(每小题 6 分,共 5 小题,30 分)21比较线性表和栈的基本操作的不同点。主要区别是对插入和删除操作的限制。如线性表允许在表内任一位置进行插入和删除;而队列只允许在表尾一端进行插入,在表头一端进行删除;所以也称队列为受限的线性表。表
7、头为队列头;表尾为队列尾。插 入 删 除线性表 Insert(L,i,x) Delete(L,i)(1in+1) (1in)队列 Insert(L,n+1,x) Delete(L,1)22有一个二叉树按层次顺序存放在一维数组中,如下图所示:试求:(1)该树的后序遍历序列。(2)画出该树的后序线索树。1 2 3 4 5 6 7 8 9 10 11 (1)后序遍历序列 C E D B A (2)后序线索树ABE DC23分析顺序查找算法的“监视哨”设置作用为了考虑查找不成功的情况,在每次进行关键字的比较前,首先要判断循环变量 i是否数组越界,这对算法来说是必要的。如果每步省略数组下标是否越界的判断
8、,则可以大大提高算法运行的效率。为此,可以利用预留的 0 号单元,作为所设的“监视哨”控制循环变量 i 的出界。假设数据从后向前比较,监视哨设在数组低端 L.elem 0 = k 将算法中的判断语句while (i next ) / 链表不空且p = L-next; (1)while( knext; +k; / while if (p / 以指针 ha 记 a1结点的位置 (4)= p-next; / 将 b1 结点链接在头结点之后p-next = NULL; / 设 am的后继为空q = L-next; / 令 q 指向 b 1结点 while (q-next) q = q-next; /
9、查找 b n 结点 q-next = ha; / (5) / if(p) / if(m) / exchange_L 答:(1)k = 1;(2)查找第 am 个结点(3)p-next(4)L-next(5)将第 a1 结点链接到 b n 结点之后五、算法阅读题(本题 10 分)27设任意 n 个整数存放于数组 A(1:n)中,阅读算法,指出功能及分析指针 i 和 j 的作用。void Arrange(int A,int n) / n 个整数存于数组 A 中int i=0,j=n-1,x; / 数组下标从 0 开始while(i0) i+; while(ik )/ k=-1 表明当前考察的是第一
10、个元素L.elem+k = L.elemi; / forL.length = k+1;/ 修改表长 / purge_Sq 此算法的时间复杂度为 O (L.length2 )。七、算法设计题(本题 10 分)29设计算法从图的邻接表结构转换成邻接矩阵结构的算法。答:1. #include 2. #include 3. #include 4. 5. int a100100;/邻接矩阵的载体 6. 7. typedef struct ArcNode 8. int adjvex; 9. struct ArcNode *nextarc; 10. ArcNode; /表结点 11. 12. typedef
11、 struct VNode 13. char data; 14. ArcNode *firstarc; 15. VNode,AdjList20;/头结点 16. 17. typedef struct 18. AdjList vertices; 19. int vexnum,arcnum; 20. ALGraph;/邻接表 21. 22. int LocateVex(ALGraph G,char e) 课程名称: 数据结构 II823. 24. int i; 25. 26. for(i=0;iadjvex=j; 62. s-nextarc=NULL; 63. p=G.verticesi.firs
12、tarc; 64. if(!p) 65. 66. G.verticesi.firstarc = s; 课程名称: 数据结构 II967. 68. else 69. 70. while(p-nextarc) 71. p=p-nextarc; 72. p-nextarc=s; 73. 74. 75. /CreateAdiMatrix 76. 77. void trans(ALGraph G) 78. /转换函数 79. int i,j; 80. ArcNode *p; 81. 82. for(i=0;iadjvex=1; 93. p=p-nextarc; 94. 95. 96. 97. 98. v
13、oid Output(ALGraph 101. 102. for(i=0;iG.vexnum;i+) 103. 104. for(j=0;jG.vexnum;j+) 105. 106. printf(“%d “,aij); 107. 108. printf(“n“); 109. 110. 课程名称: 数据结构 II10111. 112. 113. int main() 114. 115. ALGraph G; 116. 117. printf(“有向图处理篇 n“); 118. CreatAdList(G); 119. trans(G); 120. Output(G); 121. 122. return 0; 123.