8253163数据结构JAVA指导书修改.docx
《8253163数据结构JAVA指导书修改.docx》由会员分享,可在线阅读,更多相关《8253163数据结构JAVA指导书修改.docx(11页珍藏版)》请在冰豆网上搜索。
![8253163数据结构JAVA指导书修改.docx](https://file1.bdocx.com/fileroot1/2022-11/23/17dae8cf-0684-4b96-9cd0-74564ba3c940/17dae8cf-0684-4b96-9cd0-74564ba3c9401.gif)
8253163数据结构JAVA指导书修改
《数据结构(JAVA)》实验指导书
华南农业大学信息学院软件学院
杨春主编
目录
第一部分《数据结构(JAVA)》实验要求1
一、《数据结构(JAVA)》实验教学概述1
1、实验教学的基本情况1
2、实验教学的指导思想和教学目的1
3、实验项目表1
二、《数据结构(JAVA)》实验教学规范2
1、实验课的意义2
2、实验步骤2
3、实验报告(文档)规范3
4、实验考核4
第二部分数据结构(JAVA)实验5
实验一算法设计与分析5
实验二线性表的基本操作6
实验三栈和队列及递归算法8
实验四树和二叉树的基本操作9
第一部分《数据结构(JAVA)》实验要求
一、《数据结构(JAVA)》实验教学概述
1、实验教学的基本情况
课程总学时数:
48学时;课程总学分:
3学分
实验总学时:
16
适用专业:
信息学院信息管理与信息系统专业
考核方式及方法:
实际操作+程序运行+实验报告。
实验成绩、考勤及书面作业成绩组成平时成绩。
平时成绩占课程总成绩30%,考试成绩占课程总成绩70%。
成绩评定:
在参考“难度系数”的基础上
>=90——选做内容/必做内容功能完善,编程风格好,人机接口界面好;
80~90——必做内容功能完善,完成部分选做内容,编程风格好,人机接口界面良好;
70~80——完成必做内容,编程风格良好;
60~70——能完成必做内容;
<60——未按时完成必做内容,或者抄袭(含雷同者)。
2、实验教学的指导思想和教学目的
1)指导思想:
通过由浅入深、循序渐进、精讲多练,培养学生对计算机数据结构(JAVA)的熟练使用,使学生全面了解数据结构(JAVA)的特点,熟练掌握数据结构(JAVA)的基本设计方法和工作原理。
2)教学目的:
使学生通过实验来验证课堂教学的理论,并学会设计一些简单的综合应用程序或小型的模拟数据结构(JAVA)。
3、实验项目表
必做/选做
实验项目
难度系数
实验类型
每组人数
《数据结构(JAVA)》8个实验必做
算法设计与分析
验证性
6
线性表的基本操作
验证性
6
栈和队列及递归算法
验证性
6
树和二叉树的基本操作
综合性
6
由于只学习过JAVA,所以要求对真实数据结构(JAVA)的各种数据结构进行操作,而是对你自己所设置的一些数据结构(如数组、链表或队列)进行操作,来模拟实现数据结构(JAVA)中的算法。
最终《数据结构(JAVA)》需要上交书面实验报告。
二、《数据结构(JAVA)》实验教学规范
1、实验课的意义
实验是对学生的一种全面综合训练。
是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验题中的问题比平时的习题复杂得多,也更接近实际。
实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变"活",起到深化理解和灵活掌握教学内容的目的。
平时的练习较偏重于如何编写功能单一的"小"算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。
此外,还有很重要的一点是:
机器是比任何教师都严厉的检查者。
2、实验步骤
常用的软件开发方法,是将软件开发过程划分为分析、设计、实现和维护四个阶段。
虽然数据结构(JAVA)课程中的实验题目的远不如从实际问题中的复杂程度高,但为了培养一个软件工作者所应具备的科学工作的方法和作风,也应遵循以下五个步骤来完成实验题目:
1)问题分析和任务定义
在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么,限制条件是什么。
本步骤强调的是做什么,而不是怎么做。
对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。
例如:
输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么,是否接受非法的输入,对非法输入的回答方式是什么等。
还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式的输入数据。
2)逻辑设计和详细设计
在设计这一步骤中需分逻辑设计和详细设计两步实现。
逻辑设计指的是,对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型;详细设计则为定义相应的存储结构并写出各函数的伪码算法。
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。
作为逻辑设计的结果,应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法。
详细设计的结果是对数据结构和基本操作作出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架。
在求精的过程中,应尽量避免陷入语言细节,不必过早表述辅助数据结构和局部变量。
3)编码实现和静态检查
编码是把详细设计的结果进一步求精为程序设计语言程序。
如果基于详细设计的伪码算法就能直接在键盘上输入程序的话,则可以不必用笔在纸上写出编码,而将这一步的工作放在上机准备之后进行,即在上机调试之前直接用键盘输入。
然而,不管你是否写出编码的程序,在上机之前,认真的静态检查是必不可少的。
静态检查主要有两种方法,一是用一组测试数据手工执行程序(通常应先分模块检查);二是通过对程序深入全面地理解程序逻辑,在这个过程中再加入一些注解和断言。
如果程序中逻辑概念清楚,后者将比前者有效。
4)上机准备和上机调试
上机准备包括以下几个方面:
(1)注意同一高级语言文本之间的差别。
(2)熟悉机器的数据结构(JAVA)和语言集成环境的用户手册,尤其是最常用的命令操作,以便顺利进行上机的基本活动。
(3)掌握调试工具,考虑调试方案,设计测试数据并手工得出正确结果。
应该能够熟练运用高级语言的程序调试器DBBUG调试程序。
(4)上机调试程序时要带一本高级语言教材或手册。
调试最好分模块进行,自底向上,即先调试低层函数。
在调试过程中可以不断借助DEBUG的各种功能,提高调试效率。
调试中遇到的各种异常现象往往是预料不到的,此时应动手确定疑点,通过修改程序来证实它或绕过它。
调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果。
5)总结和整理实验报告
3、实验报告(文档)规范
实验报告的开头应首先包括如下成绩单表格,并填写班级、学号、姓名、题目等信息。
华南农业大学信息(软件)学院
《数据结构(JAVA)》综合性、设计性实验成绩单
开设时间:
2010学年第一学期
班级
学号
姓名
实验题目
把你选择的题目写在这里
成绩
教师签名
然后,在实验报告主体中包括以下5个内容:
一、实验报告撰写提纲:
1、实验目的(1分)
2、实验内容(2分)
3、实验步骤与结果(3分)
4、源码(2分)
5、结论与讨论(2分)
值得注意的是,实验报告的各种文档资料,要在程序开发的过程中逐渐充实形成,而不是最后补写。
必要时可在实验报告中附部分关键源代码,但不需要附全部源代码。
4、实验考核
1)考核点:
编程(Programming:
50分)、测试分析(Testing&Analyzing:
20分)、实验报告(Documentation:
30分);
2)《数据结构(JAVA)》上交内容:
①源代码及可执行程序(电子版);
②实验报告电子版;
③实验报告打印稿。
上交时间与地点由任课教师指定。
第二部分数据结构(JAVA)实验
实验一算法设计与分析
一、实验目的
1.了解数据结构课程的目的,性质和主要内容,理解数据结构和算法的基本概念,熟悉算法的描述方法,算法时间复杂度和空间复杂度的分析和计算方法。
二、实验要求
1.学习Eclipse或Myeclipse的使用技术,并撰写简单的算法程序。
2.编写完整程序完成下面的实验内容并上机运行。
3.整理并上交实验报告。
三、实验内容
(1)判断已按升序排序。
实现isSorted()方法判断整数(对象)数组元素是否已按升序排序,生命如下:
PublicstaticbooleanisSorted(int[]table)//判断整数数组是否已按升序排序
PublicstaticbooleanisSorted(Comparable[]table)//判断对象数组是否已按升序排序
(2)数组逆置。
将一个已知数组中所有元素的次序颠倒为相反次序,求算法的时间复杂度和空间复杂度。
(3)用递归算法求两个整数的最大公因数。
设有不全为0的两个整数a和b,记gcd(a,b)为他们的最大公因数,即同时能整除a和b的公因数中的最大者。
按照欧几里德(Euclid)的辗转相除法。
gcd(a,b)具有如下性质:
用递归算法实现gcd(a,b),并给下列调用:
求两个整数a,b的最小公倍数;
求三个数a,b,c的最大公约数
实验二线性表的基本操作
一、实验目的
1.理解线性表的逻辑结构、两种存储结构和数据操作,熟练运用JAVA语言实现线性表的基本操作,分析各种操作算法特点和时间复杂度。
二、实验要求
1.认真阅读和掌握和本实验相关的教材内容。
2.编写完整程序完成下面的实验内容并上机运行。
3.整理并上交实验报告。
三、实验内容
1)设计一个有序顺序表(元素已排序,递增或递减),实现插入、删除等操作,元素插入位置由其值决定。
2)在SinglyLinkedList或HSLingkedList类中增加下列成员方法
publicSinglyLinkedList(E[]element)//由指定数组中的多个对象构造单链表
publicSinglyLinkedList(SinglyLinkedListlist)//以单链表list构造新的单链表,复制单链表
publicvoidconcat(SinglyLinkedListlist)//将指定单链表list链接在当前单链表之后
publicNodesearch(Eelement)//若查找到指定对象,则返回结点,否则返回null
publicbooleancontain(Eelement)//以查找结果判断单链表是否包含指定对象
publicbooleanremove(Eelement)//移去首次出现的指定对象
publicbooleanreplace(Objectobj,Eelement)//将单链表中的obj对象替换为对象element
publicbooleanequals(Objectobj)//比较两条单链表是否相等
3)声明循环单链表类CircSinglyLinkedList,实现LList接口中的方法。
4)声明双链表类DoublyLinkedList,实现LList接口中的方法。
5)声明排序的双链表类。
6)声明循环双链表类CHDoublelyLinkedList,实现LList接口中的方法。
publicclassCHDoublelyLinkedListimplementsLList//带头结点的循环双链表类
7)分别采用循环单链表、双链表或循环双链表求解约瑟夫环问题,并分析各操作效率。
8)使用迭代器对象实现下列方法。
PublicintindexOf(objectobj)//返回指定对象首次出现位置,若未找到返回-1
PublicBooleanequals(objectobj)//比较两个线性表是否相等
9)多项式相加
一条单链表可以表示一个一元多项式,每个结点包含三个域:
指数域、系数域和后继结点链。
表示多项式3x4-6x2+5x-10的单链表如图所示。
给定两个多项式,实现两个多项式的相加算法。
head
系数指数域
3
4
-6
2
5
1
-10
0
∨
10)有效管理一个1~n的随机数序列,要求生成初始序列,保证序列中的元素值不重复,当增加或删除一个元素的时候,使序列元素值动态更新。
例如,一个MP3播放器使用速记方式播放10首歌曲,曲目播放次序就是由1~10组成的一个随机数序列,当增加或删除一首歌的时候,要及时更新序列中元素值,不重复播放
实验三栈和队列及递归算法
一、实验目的
1.理解栈和队列抽象数据类型,掌握栈和队列的存储结构和操作实现,理解栈和队列在实际应用问题的作用。
二、实验要求
1.进行队列的基本操作时要注意队列“先进先出”的特性。
2.编写完整程序完成下面的实验内容并上机运行。
3.整理并上交实验报告。
三、实验内容
(1)使用一个栈,将十进制转换成二进制。
(2)分别用循环单链表、循环双链表结构设计队列,并讨论他们之间的差别。
(3)使用3个队列分别保留手机最近10个“未接来电”、“已接来电”、“以拨电话”。
(4)走迷宫。
一个迷宫如图所示,他有一个入口和一个出口,其中白色单元表示通路,黑色单元表示不通路。
试寻找一条从入口到出口的路径,每一部只能从一个白色单元走到相邻的白色单元,直至出口。
分别用站和队列求解问题。
入口
出口
(5)骑士游历
骑士游历问题是指,在国际象棋的棋盘(8行*8列)上,一个马要遍历棋盘,即走到棋盘上的每一格,并且每隔只到达一次。
设码在棋盘的某一位置(x,y)上,按照“走马日”的规则,下一步有8个方向走,如图所示。
若给定起始位置(x0,y0),使用站和队列探索出一条马遍历棋盘的路劲。
12345678
8
1
7
2
马
6
3
5
4
实验四树和二叉树的基本操作
一、实验目的
1.理解二叉树的定义、性质、存储结构等基本概念,掌握二叉树类的设计方法,以及遍历、插入、删除等二叉树操作的算法实现;掌握采用链式存储结构表达非线性结构的设计方法;掌握采用递归算法实现递归数据结构基本操作的设计方法。
2.熟悉树的定义、表示、存储结构和遍历,具备使用树各种操作的能力。
二、实验要求
1.复习树与二叉树的定义与基本操作方法。
3.编写完整程序完成下面的实验内容并上机运行。
4.整理并上交实验报告。
三、实验内容
(1)在一棵二叉链表表示的二叉树中,实现以下操作,并说明采用哪种遍历算法,其他遍历算法是否可行。
①输入叶子结点。
②求二叉树中叶子结点个数。
③将每个结点的左子树与右子树交换。
④验证二叉树的性质3:
n0=n2+1。
⑤输出值大于k的结点。
⑥已知先根和中根次序遍历序列构造二叉树。
⑦以广义表表示构造二叉树。
⑧判断两颗二叉树是否相等。
⑨求结点所在的层次。
⑩求一颗二叉树在后根次序遍历下第一个访问的结点。
⑪复制一颗二叉树。
⑫判断一颗二叉树是否为完全二叉树。
⑬实现二叉树后根次序遍历的非递归算法。
(2)声明三叉链表表示的二叉树类,实现二叉树的基本操作以及以下操作。
①构造一颗三叉链表表示的二叉树。
②返回指定结点的父母结点。
③返回指定结点的所有祖先结点。
④返回两结点最近的共同祖先结点。
(3)在一颗中序线索二叉树中,实现以下操作。
①调用求结点的前驱结点算法,按中根次序遍历一颗中序线索二叉树。
②按后根次序遍历中序线索二叉树。
③在构造二叉树时进行线索化。
④插入、删除操作。