1、1安徽大学 2014-2015 学年第一学期数据结构期末考试试卷(A 卷)(含参考答案)一、 单项选择题(本大题共 15 小题,第小题 2 分,共 30 分)在每小题列出的四个选项中只有一个符合题目要求,请将其代码填在题后的括号内。错选或未选均无分。1. 算法必须具备输入、输出和 C A. 计算方法 B. 排序方法C解决问题的有限运算步骤 D. 程序设计方法2. 有 n 个节点的顺序表中,算法的时间复杂度是 O(1)的操作是 A A. 访问第 i 个节点(1in)B. 在第 i 个节点后插入一个新节点( 1i n)C. 删除第 i 个节点(1in)D. 将 n 个节点从小到大排序3单链表的存储
2、密度 C A大于 1 B. 等于 1C小于 1 D. 不能确定4. 循环队列 SQ 的存储空间是数组 dm,队头、队尾指针分别是 front 和 rear,则执行出队后其头指针 front 值是 D Afront=front+1 B. front=(front+1)%(m-1)C. front=(front-1)%m D. front=(front+1)%m5. 在一个具有 n 个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是 B A. O(1) B. O(n) C. O(n2) D. O(nlogn)6 设二维数组 A0m-10n-1按行优先顺序存储,则元素 Aij的地址为 B
3、 A LOC(A00)+(i*m+j) B LOC(A00)+(i*n+j)C. LOC(A00)+(i-1)*n+j-1 D. LOC(A00)+(i-1)*m+j-1 7设将整数 1,2,3,4,5 依次进栈,最后都出栈,出栈可以在任何时刻(只要栈不空)进行,则出栈序列不可能是 B A23415 B. 541322C23145 D. 154328. 一个非空广义表的表头 D A一定是子表 B. 一定是原子C不能是子表 D. 可以是原子,也可以是子表9具有 n 个节点的完全二叉树的深度为 A Alog 2(n+1) -1 B. log2n+1 C. log2n D. log2n10. 若要惟
4、一地确定一棵二叉树,只需知道该二叉树的 D A前序序列 B. 中序序列C前序和后序序列 D. 中序和后序序列11在一个无向图中,所有顶点的度数之和等于图的边数的 倍 C A1/2 B. 1C. 2 D. 412. 拓扑排序运算只能用于 C A带权有向图 B. 连通无向图C有向无环图 D. 无向图13在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是 D A希尔排序 B. 冒泡排序C插入排序 D. 选择排序14下列排序算法中时间复杂度不受数据初始状态影响,恒为 O(n2)的是 C A堆排序 B. 冒泡排序C直接选择排序 D. 快速排序15二分查找要求节点 A A有序、顺序存储 B.
5、有序、链接存储C无序、顺序存储 D. 无序、链接存储3二、 填空题(本大题共 10 小题,每小题 2 分,共 20 分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。16数据的逻辑结构分为两大类,它们是线性结构和 非线性结构 。17在单链表中(假设结点指针域名称为 next),删除指针 P 所指结点的后继结点的语句是 p-next=p-next-next 。18已知循环队列用数组 datan存储元素值,用 front,rear 分别作为头尾指针,则当前元素个数为 (rear-front+n)%n 。19 若 n 为主串长,m 为子串长,则串的朴素匹配算法最坏的情况下需要比较字
6、符的总次数为_(n-m+1)m_ _。20 广义表(a),(b),j,(d)的表尾是_(b),j,(d)_ _。21 已知二叉树有 61 个叶子节点,且仅有一个孩子的节点数为 45,则总节点数为_166 _。22 解决计算机与打印机之间速度不匹配问题,须要设置一个数据缓冲区,应是一个 队列 结构。23 n 个顶点 e 条边的图采用邻接表存储,深度优先遍历算法的时间复杂度为_O(n+e)_。24 对于 n 个关键字的集合进行冒泡排序,在最坏情况下所需要的时间为_O (n 2)_。25在一个长度为 n 的顺序表中的第 i 个元素(1i n)之前插入一个元素时,需向后移 n-i+1 个元素。三、 解
7、答题(本大题共 4 小题,共 25 分)26. 对于下面的稀疏矩阵,画出其三元组法存储表示(假设下标从 0 开始) 。(5 分)0 0 14 0 0 00 0 0 0 -6 07 0 0 0 0 240 0 0 18 0 00 15 0 0 0 04012345答案:27. 已知一棵二叉树的中序序列和后序序列分别如下,请画出该二叉树。(5 分)中序序列:D I G J L K B A E C H F后序序列:I L K J G D B E H F C A答案:29 已知一个图的邻接表如下所示。(8 分)(1) 画出该图的图形;(4 分)(2) 根据邻接表分别画出从顶点 a 出发进行深度优先和广
8、度优先遍历所生成的生成树。(4 分)0 2 141 4 -62 0 72 5 243 3 184 1 15abcdef 125 5 5 24 3 行号 列号 值AB CD E FHGJKIL5答案:四、 算法阅读题(本大题共 3 小题,每小题 5 分,共 15 分)30设线性表的 n 个结点定义为(a 0,a1,an-1),在顺序表上实现的插入和删除算法如下,请在空白处填入适当内容。(顺序表的最大可容纳项数为 MaxSize)Template int SeqList:Insert(Type Else Last+;For(int j=last;ji;j-) dataj= (2) ;(3) ;Re
9、turn 1;Template int seqList:Remove(Type if(i=0) last-;for (int j= (4) ;jtop!=StackSize-1)s-data+s-top=x;DataType Pop(SeqStack *s)if(s-top!=-1)return s-datas-top-;void main( )DataType i;SeqStack s;s.top=-1;scanf(“%d”,while(i!=-1)push(scanf(“%d”,while(s-top!=-1)i=Pop(printf(“%6d”,i);答案:(1)程序的功能是把输入的一串
10、整数(用-1 做结束标记) ,按照与输入相反的次序输出。用栈实现这一功能。(2)输出结果 8 7 6 5 4 3 2 1。 7五、 算法设计题(本题共 10 分)33设一棵二叉树以二叉链表表示,试以成员函数形式编写有关二叉树的递归算法。(1)统计二叉树中度为 1 的结点个数;(5 分)(2)统计二叉树中度为 2 的结点个数。(5 分)(提示:递归算法如 32 题所示)解答:(1)统计二叉树中度为 1 的结点个数。TemplateInt BinaryTree :Degree1(BinTreeNode *t)constIf(t=NULL) return 0;If(t-leftchild!=NULL Return Degree1(t-leftchild)+Degree1(t-rightchild);(2) 统计二叉树中度为 2 的结点个数。TemplateInt BinaryTree :Degree2(BinTreeNode *t)constIf(t=NULL) return 0;If(t-leftchild!=NULL Return Degree2(t-leftchild)+Degree2(t-rightchild);