2015年度福州大学863数据结构与程序设计模拟题1标准答案.doc
《2015年度福州大学863数据结构与程序设计模拟题1标准答案.doc》由会员分享,可在线阅读,更多相关《2015年度福州大学863数据结构与程序设计模拟题1标准答案.doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、. 模拟题一参考答案一、单项选择题 1B。考查栈和队列的特点及应用。 C和D直接排除,缓冲区的特点需要先进先出,若用栈,先进入缓冲区的数据则要排队到最后才能打印,不符题意,故选B。 2C。考查栈的最大递归深度。时刻注意栈的特点是先进后出。出入栈的详细过程见表栈内的最大深度为3,故栈S的容量至少是3。3D。考查二叉树的特殊遍历。 分析遍历后的结点序列,可以看出根结点是在中间被访问的,而右子树结点在左子树之前,得遍历的方法是RNL。本题考查的遍历方法并不是二叉树的三种基本遍历方法,对于考生而言,重要的是要掌握遍历的思想。4B。考查平衡二叉树的定义。 根据平衡二叉树的定义有,任意结点的左、右子树高度
2、差的绝对值不超过1。而其余三个答案均可以找到不符合的结点。5C。考查完全二叉树的特点。 完全二叉树比满二叉树只是在最下面一层的右边缺少了部分叶结点,而最后一层之上是个满二叉树,并且只有最后两层有叶结点。第6层有叶结点则完全二叉树的高度可能为6或7,显然树高为7时结点更多。若第6层上有8个叶结点,则前六层为满二叉树,而第7层缺失了82=16个叶结点,故完全二叉树的结点个数最多为27-1-16=111个结点。6B。考查森林和二叉树的转换。 森林与二叉树的转换规则为“左孩子右兄弟”。在最后生成的二叉树中,父子关系在对应森林关系中可能是兄弟关系或原本就是父子关系。 情形:若结点v是结点u的第二个孩子结
3、点,在转换时,结点v就变成结点u第一个孩子的右孩子,符合要求。 情形:结点u和v是兄弟结点的关系,但二者之中还有一个兄弟结点k,则转换后,结点v就变为结点k的右孩子,而结点k则是结点u的右孩子,符合要求。 情形:结点v的父结点要么是原先的父结点或兄弟结点。若结点u的父结点与v的父结点是兄弟关系,则转换之后,不可能出现结点u是结点v的父结点的父结点。7A。考查无向连通图的特性。 每条边都连接了两个结点,则在计算顶点的度之和时,这条边都被计算了两次,故所有顶点的度之和为边数的两倍,显然必为偶数。而和则不一定正确,如对顶点数N1 无向完全图不存在一个顶点的度为1,并且边数与顶点数的差要大于1。8D。
4、考查m 阶B-树的定义。 选项A、B 和C 都是B-树的特点,而选项D 则是B+树的特点。注意区别B-树和B+树各自的特点。9. 解答本题之前要对不同排序算法的特点极为清楚。对于冒泡排序和选择排序而言,每趟过后都能确定一个元素的最终位置,而由题目中所说,前两个元素和后两个元素均不是最小或最大的两个元素并按序排列。答案D 中的二路归并排序,第一趟排序结束都可以得到若干个有序子序列,而此时的序列中并没有两两元素有序排列。插入排序在每趟排序结束后能保证前面的若干元素是有序的,而此时第二趟排序后,序列的前三个元素是有序的,符合其特点。10. D。考查限定条件的出栈序列。 A可由in,in,in,in,
5、out,out,in,out,out,in,out,out得到; B可由in,in,in,out,out,in,out,out,in,out,in,out得到; C可由in,in,out,in,out,out,in,in,out,in,out,out得到; D可由in,out,in,in,in,in,in,out,out,out,out,out得到,但题意要求不允许连续三次退栈操作,故D错。11. C。考查受限的双端队列的出队序列。 A可由左入,左入,右入,右入,右入得到;B可由左入,左入,右入,左入,右入得到;D可由左入,左入,左入,右入,左入得到。所以不可能得到C。12.C。考查平衡二叉树
6、的插入算法。 插入48以后,该二叉树根结点的平衡因子由-1变为-2,失去平衡,需进行两次旋转(先右旋后左旋)操作。13. B。考查树结点数的特性。 设树中度为i(i=0,1,2,3,4)的结点数分别为Ni,树中结点总数为N,则树中各结点的度之和等于N-1,即N=1+N1+2N2+3N3+4N4=N0+N1+N2+N3+N4,根据题设中的数据,即可得到N0=82,即树T的叶结点的个数是82。14. A。考查赫夫曼树的特性。 赫夫曼树为带权路径长度最小的二叉树,不一定是完全二叉树。赫夫曼树中没有度为1的结点,B正确;构造赫夫曼树时,最先选取两个权值最小的结点作为左、右子树构造一棵新的二叉树,C正确
7、;赫夫曼树中任一非叶结点P的权值为其左、右子树根结点权值之和,其权值不小于其左、右子树根结点的权值,在与结点P的左、右子树根结点处于同一层的结点中,若存在权值大于结点P权值的结点Q,那么结点Q的兄弟结点中权值较小的一个应该与结点P作为左、右子树构造新的二叉树。综上可知,赫夫曼树中任一非叶结点的权值一定不小于下一层任一结点的权值。15C。考查图的连通性。 要保证无向图G在任何情况下都是连通的,即任意变动图G中的边,G始终保持连通,首先需要G的任意6个结点构成完全连通子图G1,需15条边,然后再添一条边将第7个结点与G1连接起来,共需16条边。16. A。考查小根堆的调整操作。 小根堆在逻辑上可以
8、用完全二叉树来表示,根据关键序列得到的小顶堆的二叉树形式如图17.C18.B19.D20.B21.A22.A23.D24.D25.C26.B27.C28.D29.B30.D二填空题1 抽象 、 实例 2 public 、 private _ _、 protected 、 private _ _3 virtual _ 4 friend void fun(A &a) 5 静态数据成员 、 静态成员函数 6 结合性 、 优先级_ _7 Template 、 class(或typename) 8 类 、 结构体 _9 在创建对象时初始化对象的数据成员 _10 A operator+(int) 三 1.
9、* 2. 1711717 3.228,64,354 4.2400 * * * *四程序设计题算法题1. (1)算法的基本设计思想(5分): 问题的关键是设计一个尽可能高效的算法,通过链表的一趟遍历,找到倒数第k个结点的位置。算法的基本设计思想:定义两个指针变量p和q,初始时均指向头结点的下一个结点(链表的第一个结点)。p指针沿链表移动,当p指针移动到第k个结点时,q指针开始与p指针同步移动;当p指针移动到最后一个结点时,q指针所指示结点为倒数第k个结点。以上过程对链表仅进行一遍扫描。 (2)算法的详细实现步骤(5分): count=0,p和q指向链表表头结点的下一个结点; 若p为空,转; 若c
10、ount等于k,则q指向下一个结点;否则,count=count+1; p指向下一个结点,转; 若count等于k,则查找成功,输出该结点的data域的值,返回1;否则,说明k值超过了线性表的长度,查找失败,返回0; 算法结束。 (3)算法实现(5分): typedef int ElemType; /链表数据的类型定义 typedef struct LNode /链表结点的结构定义 ElemType data; /结点数据 struct Lnode *link; /结点链接指针 *LinkList;int Search_k(LinkList list,int k) /查找链表list倒数第k个
11、结点,并输出该结点data域的值 LinkList p=list-link,q=list-link; /指针p、q指示第一个结点 int count=0; while(p!=NULL) /遍历链表直到最后一个结点 if(countk) count+; /计数,若countlink;p=p-link; /之后让p、q同步移动 /while if(countdata); return 1; /Search_k 提示:算法程序题,如果能够写出数据结构类型定义、正确的算法思想都会至少给一半以上分数,如果能用伪代码写出自然更好,比较复杂的地方可以直接用文字表达。所给出的算法采用一遍扫描方式就能得到正确结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 年度 福州大学 数据结构 程序设计 模拟 摹拟 标准答案
限制150内