《数据结构(Java版)叶核亚(第4版)》样卷及答案
更新时间:2023-03-15 09:01:01 阅读量: 教育文库 文档下载
《数据结构(Java版)》课程样卷
教材:《数据结构(Java版)(第4版)》,叶核亚编著,电子工业出版社,2015年7月出版。 试题范围:第1~9章,掌握基础原理,熟悉经典算法,问答题形式考核。
编程题重点是:1.单/双链表; 2.二叉树/树,递归算法。这是必须掌握的,即使部分学生掌握不了递归算法,也必须考。
不考内容:6.3 线索二叉树求父母、插入、删除算法(没写),7.5.2 Floyd,8.5.3 平衡二叉树,第10章。可作为课程设计题。
试卷范围和难度不超过样卷。
4-0 模拟样卷
一、 填空题(16分=2分×8题)
1. 声明抽象数据类型的目的是________________________________________。 2. 以下数据存储结构声明为_________________________________________。
table∧…∧∧Node
public String replaceAll(String pattern, String str) String target=\
System.out.println(\ target.replaceAll(pattern,str)+\
//将所有与pattern匹配的子串替换为str
下列语句的执行结果是________________________________________。
4. A+B*(C-D*(E+F)/G+H)-(I+J)*K的后缀表达式为______________________。 5. 已知二维数组a[10][8]采用行主序存储,数组首地址是1000,每个元素占用4字节,则数组元素a[4][5]的存储地址是__________________________。
6. 由n个顶点组成的无向连通图,最多有_____________________条边。
7. 排序关键字序列(升序){5,17,20,32,43,55,61,61*,72,96},采用二分法查找算法,查找96的元素比较序列是____________________;查找35的元素比较序列是____________________。
8. 关键字序列{93, 17, 56, 42, 78, 15, 42*, 25, 19},采用希尔排序(升序)算法,第一趟排序后的序列是_________________________________________。
二、 问答题(50分=5分×10题)
1. 已知目标串为\,模式串为\,写出模式串改进的next数组;画出KMP算法的匹配过程,给出字符比较次数。
- 1 -
2. 画出以下稀疏矩阵非零元素三元组的十字链表存储结构。
?0?0??59???0?0??0??18000320015?0000000??000860043??0000000? 0000000??0000000?00065000??A7?8
3. 已知一棵二叉树的遍历序列如下,画出这棵二叉树并进行中序线索化。
中根遍历序列:CBDFEGAMLNKJOPRQIHS; 后根遍历序列:CFGEDBMNLKRQPOJISHA
4. 设一段正文由字符集{A,B,C,D,E,F,G,H}组成,其中每个字符在正文中的出现次数依次为
{23,5,17,4,9,31,29,18},采用Huffman编码对这段正文进行压缩存储,画出所构造的Huffman树,并写出每个字符的Huffman编码。说明Huffman编码的特点和作用。
5. 已知以下无向图G7中各顶点按{A,B,C,D,E,F,G,H}次序存储。分别画出采用深度优先搜索(从A开始)和广度优先搜索(从D开始)遍历图时栈或顺序循环队列(容量为6)的动态变化示意图,说明栈或队列的作用。
10A2CB3D5FH74EG6
6. 什么是图的最小生成树?构造以下带权无向图的最小生成树,给出该最小生成树代价。说明Prim算法和Kruskal算法的差别。
A7B12419C56G13151620DF10E11A6F10GE11DB12C4A6GEB4FA6GF10E B124C55DC5D(c)Prim算法不断扩充T,(d)Kruskal算法不断合并树,依次 (a)带权无向图(b)最小生成树,代价为45T顶点扩充次序为AGBC……选择边(B,G),(A,G),(C,D),(E,F)……7. 画出以下带权有向图采用Dijkstra算法以E为源点的单源最短路径所选择的边,写出各路径长度。
A20B938152337C18511E8
19D13F
8. 设散列表采用链地址法,初始容量length为10;散列函数采用除留余数法hash(key)=key % length;装填因子为0.75,散列数组容量以2倍扩充。由关键字序列{16,75,60,43,54,90,46,31,27,88,64,50}构造散列表,分别画出扩容前和最终状态图,计算ASL成功。
9. 画出由关键字序列{50, 16, 74, 60, 43, 16, 90, 46, 31, 29, 88, 71, 64, 13, 65}构造的一棵二叉排序树,计算ASL成功。执行删除结点50、插入50,再画出操作后的二叉排序树。
- 2 -
10. 什么是堆序列?堆序列在堆排序算法中起什么作用?将关键字序列{29, 10, 25, 26, 58, 12, 31, 18, 47}分别建成一个最大堆和一个最小堆,写出堆序列,画出对应的完全二叉树;写出每一趟堆排序结果。若有关键字重复元素,做标记以区别。
三、 程序阅读和改错题(18分=6分×3题)
1. SortedCirDoublyList
public void merge(SortedCirDoublyList
DoubleNode
DoubleNode
while (p!=this.head && q!=list.head) //循环语句功能是什么? if ((p.data).compareTo(q.data)<0) p = p.next; else
{ q.prev = p.prev; p.prev.next = q; p.prev = q; q = q.next; q.prev.next = p;
}
if (q!=list.head) //选择语句功能是什么? { q.prev = this.head.prev; this.head.prev.next = q; list.head.prev.next=this.head; this.head.prev = list.head.prev; }
list.head.prev = list.head; list.head.next = list.head; }
//为什么要这两句?
2. 阅读程序,回答以下问题。
public static StringBuffer trim(StringBuffer s) {
int i=0;
while (i for (int j=i; j if (s.charAt(j)!=' ') s.setCharAt(i++, s.charAt(j)); //非空格字符向前移动到空格字符位置 return s; } //将s中所有空格删除,返回操作后的s串 ① 对于以下调用语句,运行结果是什么?正确的运行结果是什么? StringBuffer str = new StringBuffer(\ a bc d e f xyz\System.out.println(\ ② trim()方法怎样实现所求功能?算法存在什么错误? ③ 如何改正? - 3 - 3. 已知Tree ① 设一棵树(森林)的广义表表示如下,画出所构造的树以及树的存储结构图,输出树的横向凹入表示法。 树(森林)的广义表表示:G(A(C(E,F),B,D)),H(J(L),I,K) ② 以下levelorder()方法的功能是什么?对于上述树(森林),运行结果是什么? ③ levelorder()方法存在什么错误?如何改正? public void levelorder() { LinkedQueue> que=new LinkedQueue>(); for (TreeNode for (p=p.child; p!=null; p=p.sibling) que.add(p); } System.out.println(); } 四、 程序设计题(16分=8分×2题) 1. SinglyList //删除this中所有与pattern匹配的子表,BF模式匹配查找到再删除 public void removeAll(SinglyList 2. 实现以下对二叉链表存储的二叉树类BinaryTree //判断二叉树bitree是否二叉排序树 - 4 - 4-0 样卷答案 一、 填空题(16分=2分×8题) 1. 使数据类型的定义和实现分离,使一种定义有多种实现。 2. 见《数据结构(Java版)(第4版)习题解答》第7页习2-6。 3. \4. ABCDEF+*G/-H+*+IJ+K*-,见《数据结构(Java版)(第4版)习题解答》第27页习4-5。 5. mat+(i*n+j)*4=1000+(4*8+5)*4=1148 6. n*(n-1)/2 7. {43,61*,72,96};{43,17,20,32}。解释见《习题解答》第54页习8-9。 8. 见《数据结构(Java版)(第4版)习题解答》第57页习9-4。 二、 问答题(50分=5分×10题) 1. 模式串\改进的next数组为 j 模式串 \p0p1?pj?1\中最长相同的前后缀子串长度k p与p比较 改进的next[j] kj0 a -1 -1 t7cbp7t8acp81 b 0 ≠ 0 t9a2 c 0 ≠ 0 t10b3 a 0 = -1 t11ct12a4 a 1 ≠ 1 t13a5 b 1 = 0 t14bt15a6 a 2 ≠ 2 t16b7 b 1 = 0 t17c8 c 2 = 0 KMP算法匹配过程如下,字符比较次数为20。 t0targetpatternat1at2bcp2t3cap3t4bap4t5abp5t6bap6=ap0≠bp1(a)第1次匹配,t0=p0,t1≠p1,比较2次,next[1]=0t0targetat1at2bt3ct4bt5aap4t6bbp5t7cap6t8abp7t9acp8t10bt11ct12at13at14bt15at16bt17c===cp2patternap0bp1p3(b)第2次匹配,t1=p0,……,t4≠p3,比较4次,next[3]=-1≠a t0targetat1at2bt3ct4bpatternt5at6bt7ct8at9at10bt11ct12abp7t13acp8t14bt15at16bt17c======bp5t10bbp1ap0bp1cp2ap3ap4p6(c)第3次匹配,t5=p0,……,t11≠p6,比较7次,next[6]=2t0targetat1at2bt3ct4bt5at6bt7ct8apatternt9aap0t11ct12at13at14bt15at16bt17c=≠a=====bp7cp2ap3ap4bp5ap6(d)第4次匹配,t11=p2,……,t17=p8,比较7次,匹配成功,与模式串匹配的子串序号为9 2. 见《数据结构(Java版)(第4版)习题解答》第34页习5-9。 - 5 - =cp8 3. 见《数据结构(Java版)(第4版)习题解答》第37页习6-19、第42页图6.9。 【评分标准】构造二叉树3分,中序线索化2分。 4. 见《数据结构(Java版)(第4版)习题解答》第44页习6-31、6-34。 5. 见《数据结构(Java版)(第4版)习题解答》第48页习7-15。 6. 见《数据结构(Java版)(第4版)习题解答》第50页习7-11、7-15。 7. 见《数据结构(Java版)(第4版)习题解答》第52页习7-15。 8. 见《数据结构(Java版)(第4版)习题解答》第55页习8-12。 9. 见《数据结构(Java版)(第4版)习题解答》第56页习8-19。 10. 堆序列概念见教材;构造的堆见《数据结构(Java版)(第4版)习题解答》第59页习9-10。 三、 程序阅读和改错题(18分=6分×3题) 1. ① merge(list)方法功能是:归并两条排序循环双链表,将list中所有结点归并到this中,合并后设置list空。 方法体中,while语句功能是:p、q分别遍历this和list排序循环双链表,比较p、q结点值有大小,若q结点值较小,将q结点插入到p结点之前。当遍历完一条循环双链表时,while循环结束。 while之后的if语句功能是:若q!=list.head,表示遍历this结束,要将list中剩余结点(q结点开始)链接到this尾,并使this与list的最后结点连接成为环形。 合并后设置list为空,否则两条循环双链表将共用某些结点,会造成混乱。 ② 算法描述如下图所示,与第4版图9.17算法同。 prevdatanextthis.head①list.head②③p26q18⑤37④q537586906181(a) 比较p、q结点值,若p结点值小,则继续比较p的后继;否则(≥),将q结点插入在p之前pthis.head④⑥list.head⑤(b) 重复执行(a),归并结点;当p==this.head且q!=list.head时,将q结点插入在this的最后结点之后; 并使this与list的最后结点连接成为环形。设置list为空循环双链表1853758690263761①81②q③ 2. 见《数据结构(Java版)(第4版)习题解答》第21页【实验题3-11】。 3. ① 先根次序遍历树,输出树的横向凹入表示法: GHG A AJIK C E CBDL F B EF D (a)森林H J L I K - 6 - childdatarootAC∧∧BG∧siblingH∧∧J∧D∧∧L∧∧I∧K∧parent ∧E∧F∧(b)森林的父母孩子兄弟链表② 功能是按层次遍历树。上述森林的运行结果如下: 层次遍历树: G A C B D E F ③ levelorder()算法存在的错误是,只遍历了一棵树,无法遍历森林。改正如下。 public void levelorder() //按层次遍历树(森林),从根开始依次遍历森林中的每棵树 { System.out.print(\层次遍历树(森林): \ LinkedQueue> que = new LinkedQueue>(); //创建一个空队列 for (TreeNode for (TreeNode //遍历一棵树,根没有进队 { System.out.print(p.data+ \ for (p=p.child; p!=null; p=p.sibling) //所有孩子结点入队 que.add(p); } if (q.sibling!=null) System.out.print(\,\ } System.out.println(); } 上述森林的运行结果如下,结果正确,从根开始依次遍历森林中的每棵树。 层次遍历树(森林): G A C B D E F ,H J I K L 四、 程序设计题(16分=8分×2题) 1. 单链表删除所有匹配子表操作的算法描述如图所示,该算法使用BF模式匹配查找到匹配子表,可 一次删除匹配子表。 frontthis.headapattern.headbstartabcpa∧q==nullbc∧==ab(a)当一次匹配成功时,删除从start结点开始的一条匹配子表frontthis.headapattern.headbstartabc∧∧=c p=null==ab(b)start再次从front的后继结点开始寻找匹配子表并删除removeAll()方法声明如下,删除所有与pattern匹配的子表。 //删除this中所有与pattern匹配的子表,BF模式匹配查找到再删除。 public void removeAll(SinglyList - 7 - =c{ if (pattern.isEmpty()) return; Node { Node while (p!=null && q!=null && p.data.equals(q.data)) { p=p.next; q=q.next; } if (q!=null) { front=start; start=start.next; //若无此句,则死循环,错误 //一次匹配 //匹配失败,进行下次匹配 } else //匹配成功,删除该匹配子表 { front.next = p; start=p; } } } 2. 实现以下对二叉链表存储的二叉树类BinaryTree public class BinaryTree_isSorted { private static BinaryNode> bfront; //判断一棵二叉树是否为二叉排序树,T必须实现Comparable super T>接口 public static bfront=null; return isSorted(bitree.root); } //判断以p为根的子树是否为二叉排序树,bfront引用p在中根遍历次序下的前驱结点。 //按中根次序遍历一棵二叉树,若各元素按升序排序,则是一棵二叉排序树。 //二叉链表存储的二叉树,中根次序遍历是递归算法。 private static if (p==null) return true; if (!isSorted(p.left)) //判断p的左子树 return false; if (bfront!=null && p.data.compareTo((T)bfront.data)<0) return false; bfront=p; return isSorted(p.right); } } //判断p的右子树 - 8 -
正在阅读:
《数据结构(Java版)叶核亚(第4版)》样卷及答案03-15
论专利侵权中的等同替换原则11-08
软件销售工作总结(精选多篇)09-28
中国人民解放军内务条例04-20
《六国论》的练习及答案03-11
2018领导与科学技术答案 判断题01-18
发动机冷却系统研究状况及发展趋势09-03
挽回女友前先了解女人深入的内在08-14
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 数据结构
- 答案
- 叶核亚
- Java
- 2011-2012八年级生物上册期末考试质量分析李育葵
- 2019届高三一轮复习单元测试 文化常识(1)
- 电力系统暂态分析复习思考题
- 八年级(上)数学(第一二章)第一次月考试卷(含答案)
- GCP题库含答案
- 重庆省中级主治医师(全科)基础知识考试试卷
- ADF单位根检验 - 具体操作
- 中考物理新评价答案
- 2014年人教版四年级数学下册期末试卷(附答案)
- 机械工程测试技术习题课后题解答
- 苯的说课稿(2)
- 2015上学期应用文写作考试试卷
- 1927:国共两党反目成仇的根源
- 减速器课程设计F=3000N
- 财经学院团委学生会第三届户外素质拓展活动策划(游戏改)1 - 图文
- 05第五讲 提出对策
- 2019届高考地理一轮复习 第三章 地上的大气 第三讲 常见天气系统课时作业 新人教版
- 限压式变量泵的流量特性分析
- 人教版语文五年级上册第四单元测试题(有答案)
- 2012年高考志愿填报策略汇总