1、第 1 页 共 6 页装订线华南农业大学期末考试试卷(A 卷)2011-2012 学年第 1 学期 考试科目: 数据结构(JAVA) 考试类型:(闭卷)考试 考试时间: 120 分钟学号 姓名 年级专业 2010 级信管 班 答案请写到答题纸上,写在试卷上无效一、单选题(本大题共10小题,每小题2分,共20分)1. 不考虑优先队列,已知入队序列为A,B,C , D,可能的出队序列为:()A. D,B,C,A B. A,B ,C,D C. A,D,C,B D. A, C,D,B2. 已知结点数为 1001 的完全二叉树,其叶子结点个数为:()A.500 B.501 C.602 D.1 3. 具有
2、 8000 个结点的二叉树,其高度至少为:()A.10 B.11 C. 12 D.13 4. 设一棵哈夫曼树有 n 个非叶子结点,该树共有()个节点 A.n B.2n-1 C.2n+1 D. 2n5. 归并排序的空间复杂度是:()A. O(nlog 2n) B. O(n 2) C. O(log 2n) D. O(n)6. 以下程序时间复杂度为:()int n=8,m=1024,count=1024;for (int i=m; i=1; i-)count+;A.O(1) B. O(m) C. O(log 2m) D. O(mlog 2m)7. 式 n+log2n+n*n*n 的时间复杂度为:()
3、A.O(1) B. O(n 3) C. O(n+log 2n) D. O(log 2n)8. 衡量算法的标准有:()A.时间复杂度和空间复杂度 B.输入和输出 C.有穷性和确定性 D.可行性 9. 已知入栈顺序为a,b,c,d,e,f,g,下列哪个是可能的出栈顺序:()A. d,e,c,f,b,g,a B. f,e,g,d,a,c,b C. e,f,d,g,b,c,a D. e,f,d,g,b,a,c 10. 已知一个顺序循环队列最多能容纳 60 个元素,当前有 58 个元素时,如果再插入 5 个元素,该队列有多少空元素:()A.-3 B.63 C.5 D.57二、填空题(本大题共10小题,每
4、空1分,共20分)1. 软件设计是计算机学科各个领域的核心。软件设计时要考虑的首要问题是数据的表示、组织和处理方法。_和_是软件系统设计的核心。2. 双链表的插入和删除操作:q = new DLinkNode(x); _;q.next = p;p.prev.next = q; _。3. 两个顺序表相等是指它们各对应_并且_。4. 设一棵二叉树的叶子结点数为 n0,2 度结点数为 n2,则 n0=_。N 个节点完全二叉树的高度是_5. 设嵌套广义表 Z(e, Z)(e, (e, (e, (),则 Z 的长度为_,深度_。6. 在树结构中,约定根节点的层次为_,其他节点的层次是其父母节点的层次加_
5、。7. 树的表示法有:图示法、_和_三种。8. 一棵高度为 k(k=0)的完全二叉树是具有至多_个结点的二叉树,一棵高度为 k(k=0)的满二叉树是具有至少_个结点的二叉树。中根遍历序列和后根遍历序列相反的二叉树是_,由 256 个权值构造一棵哈夫曼树,则该二叉树共有_结点。9. 由 n 个顶点组成的无向连通图,最多可以有_条边。10. 10 个元素的排序数据序列采用折半查找的平均查找长度是(写出算式)_。三、程序分析题 (本题共2小题,每小题8分,共16分)1. 下列该程序片段的运行结果是:_。/import dataStructure.linearList.LinkedStack; /链式
6、栈(略) public class Exp_bracketpublic static String isValid(String expstr) /判断expstr表达式中的圆括号是否匹配 /返回错误信息LinkedStack stack = new LinkedStack(); /创建空栈int i=0;while(i make() /构造给定的一棵二叉树BinaryTree bitree=new BinaryTree(); /创建空二叉树BinaryNode child_f, child_d, child_b, child_c;child_d = new BinaryNode(“D“, n
7、ull, new BinaryNode(“G“);child_b = new BinaryNode(“B“, child_d, null);child_f = new BinaryNode(“F“, new BinaryNode(“H“), null);child_c = new BinaryNode(“C“, new BinaryNode(“E“), child_f);bitree.root = new BinaryNode(“A“, child_b, child_c);return bitree;public static void main(String args)BinaryTree
8、bitree = make();bitree.preOrder(); /先根次序遍历二叉树bitree.inOrder(); /先根次序遍历二叉树bitree.postOrder(); /后根次序遍历二叉树bitree.levelOrder(); /层次遍历二叉树则程序运行结果如下:先根次序遍历二叉树(写出字母顺序):_中根次序遍历二叉树(写出字母顺序):_后根次序遍历二叉树(写出字母顺序):_层次遍历二叉树(写出字母顺序): _四、简答题 (本题共6小题,每小题6分,共36分)1. 什么是栈和队列?两者有何异同?什么情况下需要使用栈或队列?采用顺序存储结构的栈和队列,在进行插入、删除操作时需
9、要移动数据元素吗?为什么?什么是队列的假溢出?为什么顺序存储结构队列会出现假溢出?怎样解决队列的假溢出问题?链式存储结构队列会出现假溢出吗?顺序存储结构的栈会出现假溢出吗?为什么? 2. 已知一棵二叉树的中根次序遍历序列为 CBDFEGAMLNKJOPRQIHS,后根次序遍历序列为 CFGEDBMNLKRQPOJISHA,画出这棵二叉树(3 分)并进行中序线索化(3 分) 。3. 设一段正文由字符集A,B,C,D,E,F,G,H组成,其中每个字符在正文中的出现次数依次为23,5,17,4,9,31,29,18 ,采用 Huffman 编码对这段正文进行压缩存储,画出所构造的 Huffman 树
10、,并写出每个字符的 Huffman 编码(4分) 。说明 Huffman 编码的特点和作用(2 分) 。4. 利用 Prim 算法构造以下从 A 节点出发的带权无向图的最小生成树,给出该最小生成树的代价。GF( a ) 带 权 无 向 图41 11 61 51 9BAC DE71 31 252 01 06( b ) 最 小 生 成 树 , 代 价 为 4 5( c ) P r i m 算 法 不 断 扩 充 T ,T 顶 点 扩 充 次 序 为 A G B C ( d ) K r u s k a l 算 法 不 断 合 并 树 , 依 次选 择 边 ( B , G ) , ( A , G )
11、, ( C , D ) , ( E , F ) GF41 1BAC DE1 251 06GF4BAC DE51 06GF4BAC DE1 2565. 什么是二叉排序树?画出由关键字序列25,27,30,12,11,18,14,20,15,22 构造的一棵二叉排序树,计算 ASL 成功 。画出删除节点 12,然后再插入节点 12后的二叉排序树。6. 下列 removeAll()方法欲删除 target 串中所有与 pattern 匹配的子串。public static StringBuffer removeAll(StringBuffer target, String pattern)int m
12、=target.length(), n=pattern.length();int i=target.indexOf(pattern), k=i;第 5 页 共 6 页装订线while (k!=-1) int j=k+n;k=target.indexOf(pattern, j);while (k0 /采用顺序表存储约瑟夫环的元素,元素类型是字符串,构造方法参数指定顺序表容量for (int i=0; _; i+)_; /添加字符串对象System.out.print(“约瑟夫环(“+number+“,“+start+“,“+distance+“),“);_; /输出顺序表的描述字符串int i
13、= start; /计数起始位置while (list.length()1) /多于一个对象时循环 _;System.out.print(“删除“+list.remove(i).toString()+“,“); /删除指定位置对象System.out.println(list.toString();System.out.println(“被赦免者是“+list.get(0).toString();public static void main(String args)new Josephus(5,0,2);/*程序运行结果如下:约瑟夫环(5,0,2) ,(A, B, C, D, E) 删除 B,(A, C, D, E) 删除 D,(A, C, E) 删除 A,(C, E) 删除 E,(C) 被赦免者是 C*/注意:泛型的实际参数只能是类,不能是基本类型 char、int 等