8253163数据结构JAVA指导书修改.docx

上传人:b****4 文档编号:3487080 上传时间:2022-11-23 格式:DOCX 页数:11 大小:48.26KB
下载 相关 举报
8253163数据结构JAVA指导书修改.docx_第1页
第1页 / 共11页
8253163数据结构JAVA指导书修改.docx_第2页
第2页 / 共11页
8253163数据结构JAVA指导书修改.docx_第3页
第3页 / 共11页
8253163数据结构JAVA指导书修改.docx_第4页
第4页 / 共11页
8253163数据结构JAVA指导书修改.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

8253163数据结构JAVA指导书修改.docx

《8253163数据结构JAVA指导书修改.docx》由会员分享,可在线阅读,更多相关《8253163数据结构JAVA指导书修改.docx(11页珍藏版)》请在冰豆网上搜索。

8253163数据结构JAVA指导书修改.docx

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)在一颗中序线索二叉树中,实现以下操作。

①调用求结点的前驱结点算法,按中根次序遍历一颗中序线索二叉树。

②按后根次序遍历中序线索二叉树。

③在构造二叉树时进行线索化。

④插入、删除操作。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1