1、宁波大学2019年硕士研究生招生考试初试试题(A卷) (答案必须写在考点提供的答题纸上)科目代码: 916总分值: 150科目名称:数据结构与算法一、 选择题: (共30分,每题2分)1. 采用链式存储结构表示数据时,相邻的数据元素的存储地址( )。 A. 一定不连续 B. 不一定连续 C. 一定连续 D. 部分连续,部分不连续2. 在一个单链表中,若*p节点不是最后节点,在*p之后插入节点*s,则执行( )。A. s-next = p; p-next = s; B. s-next = p-next ; p-next = s;C. s-next = p-next ; p = s; D. p-n
2、ext = s; s-next = p;3. 用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j 沿链移动的操作为( )。 A. j=j-next B. j=rj.next C .j=j+1 D. j=rj- next4. 向一个栈顶指针为HS的链栈(带头结点)中插入一个s所指结点时,则执行( )。A. s-next = HS ; HS = s; B. HS-next = s; C. s - next = HS-next ; HS-next = s; D. s-next = HS ; HS = HS-next;5. 已知一个推入堆栈的字符序列顺序是a,b,c,d,e,
3、 下列哪个字符序列是不能通过堆栈操作得到的字符序列( )。A. e,d,c,b,a B. d,e,c,b,a C. d,c,e,a,b D. a,b,c,d,e6. 循环队列存储在数组A0.m中,则入队时的操作为( )。A. rear=rear+1 B. rear=(rear+1) mod (m-1)C. rear=(rear+1) mod m D. rear=(rear+1)mod(m+1) 7. 在一个具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队空的条件是( )。A. front = = (rear +1) % n B. front = =
4、 rear C. front = =0 D. (front +1) % n = = rear8. 对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概念的,插入一个元素时平均要移动表中的( )个元素。 A. (n1)/2 B. n C. n/2 D. (n1)/29. 对广义表 A=(a,(b)),(c,(),d)执行操作gettail(gethead(gettail(A) 的结果是:( ) 。A.() B. () C. d D. (d)10. 构造哈希表的关键字的输入序列为(25,21,30,13,4,43,35,64,5,17,2,8),哈希函数H(key)=key%15,
5、采用链地址法解决冲突。查找64的关键字比较次数是( )。 A. 1 B. 2 C. 4 D . 3 11. 下图是一个二叉树后序遍历的结果是 ( )。A、 abcdef B、 cfabde C、 dbaecf D、 cbfade12. 现有以下按前序和中序遍历二叉树的结果: 前序:GAHFDBCE 中序:AHGBDCFE,该二叉树的后序遍历序列为 ( ) 。A . GHABCDEF B. HABCDEFG C. ABCDEFGH D. HABCGDEF13. 一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是( )。 A . 39 B. 119 C. 111 D
6、. 23914. 一棵非空二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足( )。A . 是一棵满二叉树 B. 所有的结点均无右孩子 C. 所有的结点均无左孩子 D. 只有一个叶子结点 15. 任何一个连通图的最小生成树 ( )。A只有一棵 B. 有一棵或多棵 C. 一定有多棵 D. 可能不存在二、 填空题:(共28分,每空2分)1. 已知某二叉树的先序遍历次序为abcdefg,中序遍历次序为badcgfe,则该二叉树的后序遍历次序为_,层次遍历次序为_。 2. 对于长度为n的关键字有序的线性表,若进行顺序查找,则平均时间复杂度为_;若采用二分法查找,则平均时间复杂度为_;3.在
7、一棵度为3的树中,度为3的结点个数为3,度为2的结点个数为2,度为1的结点个数为1,则度为0的结点个数为_。4. 在一棵m阶B-树中,除根结点外非叶结点至少有_棵子树,至多有_棵子树。5. 分别采用堆排序、快速排序、冒泡排序和归并排序,对初态为有序的表,则最省时间的是_算法,最费时间的是_算法6. 如图所示的有向无环图可以排出_种不同的拓扑序列。7. 给定一组数据6,2,7,10,3,12,以它构造一棵哈夫曼树,则树高为_,带权路径长度WPL的值为_。8. 已知一组待排序的记录关键字初始排列如下:56,26,86,35,75,19,77,58,48,42;则快速排序一趟排序的结果是 ,希尔排序
8、(初始步长为3)一趟排序的结果是 。 三、 简答题:(共52分)1. 按关键字13、24、37、90、53、34的次序构造一棵平衡二叉树,回答以下问题:(8分)(1)该平衡二叉树的高度是多少?(2)其根节点的关键字是什么?(3)其中经过了哪些调整?(指出调整名称和次数)2. 根据下图G以及它的存储,分别写出广度和深度遍历结果。设第一个访问结点是1。(6分) 3. 下图所示的AOE网络用于描述一项工程,其中的顶点表示事件,边代表一次活动,边上的权值表示完成该活动所需的时间,试回答以下问题:(6分)(1) 完成整个工程所需的总时间是多少?(2) 给出整个工程的关键活动和关键路径。 4. 设散列表的
9、长度为13,散列函数为H(k)=k%13,给定的关键码序列为19,14,23,01,68,20,84,27。试画出用线性探查法解决冲突时所构成的散列表。(5分)0 1 2 3 4 5 6 7 8 9 10 11 125. 下图表示一个地区的通讯网,边表示城市间的通讯线路,边上的权表示架设线路花费的代价,如何选择能沟通每个城市且总代价最省的n-1条线路,画出所有可能的选择。(7分)6. 已知关键字序列(60,20,31,1,5,44,55,61,200),写出对它进行第一趟快速排序(以第一个关键字为基准)后的序列的值,并指出它的稳定性(6分)7. 请给出Dijkstra最短路径算法的主要步骤,如
10、果加权图如下所示,请计算从顶点1到其它所有顶点的最短路径,给出算法具体执行过程中顶点集合的扩展情况。如果有些弧上加权为负,请问Dijkstra算法是否还能正常运行? 为什么? 如果不能正常运行请给出解决方法。(8分) 8. 已知关键字序列在R1.8中的初始状态为 R487033652456129212345678 写出在将它调整为大根堆的过程中每一次筛选后R的状态。 (6分) 四、 算法设计题:(共40分)1.请设计合理算法,在O(n)时间复杂度条件下,将中缀式a + 3*b + 4*(c-d)转化为对应的后缀表式并计算出表达式的值,若a=1,b=2,c=4,d=3,给出计算结果。(15分)2. 假设二叉树采用二叉链存储结构进行存储,每个结点有data、lchild和rchild三个域。设计一个算法,计算一棵给定二叉树中节点值为x的节点个数(注意在一棵二叉树中可能存在相同节点值的节点),并给出你所写出的算法的时间复杂度。(设二叉树中结点个数为n)(10分)3. 请采用递归方式实现二路归并排序程序MergeSort(data, first, last),在O(n*logn)时间内完成排序,以数组D=8,6,4,10,5,3,7,18为例,分析给出函数每一次递归调用的具体参数和顺序,以及对应的系统栈中的变化情况。(15分)第 6 页 共 6 页