数据结构JAVA实验一
数据结构Java语言描述课程实验设计(全文)

数据结构Jv语言描述课程实验设计数据结构是计算机类专业的核心专业基础课之一,主要讨论数据的合理组织和有效存储、处理以及算法的正确设计、分析和评价,课程本身概念抽象、方法灵活、强调逻辑思维能力、难度较大,同时课程实践性强,实验是该课程不可或缺的重要环节[1-4]。
通常数据结构课程实验是由教师将问题描述和基本要求作为实验题目给出,但又绝不是让学生拿到实验题目就直接上机进行编程调试,而是要通过在实验中贯穿软件工程的方法和原理,严格按照分析、设计、实现、测试等软件工程过程并结合具体的实现语言来完成实验,培养学生养成良好的实验习惯。
下文针对课程实验特点和目标,结合软件工程思想、面向对象语言Jv,在课程的实验组织、过程设计、保障等方面进行了一些探究。
1课程实验特点和目标由于面向对象方法已经成为目前系统开发和程序设计的主流方式,而Jv语言是一种目前使用最为广泛的面向对象程序设计语言,因此不少计算机类专业的数据结构课程采纳了Jv语言描述。
作为是一种完全面向对象的程序设计语言,Jv在提高程序的复用性和安全性时,在不同类的资源配置方面,较面向过程的程序设计语言有更高层面的要求,通过Jv语言表现各种数据结构、实现相关算法是数据结构课程的难点之一,这给语言基础薄弱的学生完成实验带来很大困难,迫切需要在目标、过程、方法等各方面精心组织和设计实验。
如图1所示,作为课程教学的重要组成部分,课程实验的目标主要围绕数据结构与算法、软件分析与设计、程序实现与验证、抽象逻辑思维等方面展开[4-7],即:①以数据结构和算法为核心,帮助学生加深对数据结构的理解;②以软件工程思想为基础,反复练习包括软件分析与设计在内的软件开发过程,培养分析问题、解决问题和程序设计的能力;③以面向对象的Jv程序设计语言为工具,提高学生利用Jv语言实现和验证算法的能力;④在理解掌握数据结构、应用软件工程思想、熟练使用Jv语言的同时,还要培养严密的抽象逻辑思维能力。
实验报告Java一

JA V A实验报告系(教研室):专业:年级:实验课程:Java语言程序设计姓名:学号:实验室号:计算机号:实验时间:指导教师签字:成绩:实验1一、实验目的1.使用while,do-while,for编写循环。
2.在软件开发中应用方法抽象的概念,开发模块化、易读、易调试和易维护的可重用代码。
3.使用Math.sqrt()求解一个数的算术平方根。
二、实验要求1.(4.2)编写程序,产生5个随机加法问题,加数是两个1到15之间的整数,最后2.(5.19)创建一个名为MyTriangle的类,它包含下面两个方法:/** Returns true if the sum of any two sides is greater than the third side. */public static boolean isValid(double side1, double side2, double side3)/** Returns the area of the triangle. */public static double area(double side1, double side2, double side3)编写一个测试程序,读入三角形三边的值,若输入有效,则计算面积;否则显示输入无效。
三角形面积公式是:下面是一些运行示例:三、 实验原理四、 实验环境1. 硬件:PC 机;2.软件:Windows 操作系统、。
五、 算法描述及实验步骤六、调试过程详细记录程序在调试过程中出现的问题及解决方法七、实验结果八、总结对上机实验结果进行分析、上机的心得体会及改进意见。
附录:1.import java.util.Scanner;public class SubtrationQuizLoop {public static void main(String[] args){final int NUMBER_OF_QUESTIONS = 5;int correctCount = 0;int count = 0;long startTime = System.currentTimeMillis();String output = "";Scanner input = new Scanner(System.in);while(count < NUMBER_OF_QUESTIONS){int number1 = (int)(Math.random()*15)+1;int number2 = (int)(Math.random()*15)+1;if(number1 < number2){int temp = number1;number1 = number2;number2 = temp;}System.out.print("What is "+number1+" + "+number2+"?");int answer=input.nextInt();if(number1 + number2 == answer){System.out.println("You are corrent!");correctCount++;}elseSystem.out.println("Your answer is wrong.\n"+number1+" + "+number2+" should be "+(number1+number2));count++;}long endTime = System.currentTimeMillis();long testTime = endTime - startTime;System.out.println("\ncorrect count is "+correctCount+"\nTest time is "+testTime / 1000 + " second\n");}}2.import java.util.Scanner;public class MyTriangle {public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.print("Enter three sides for a triangle:");double side1=input.nextDouble();double side2=input.nextDouble();double side3=input.nextDouble();if(isValid(side1,side2,side3))System.out.println("The area of the triangle is"+(double)((int)(area(side1,side2,side3)*100))/100);elseSystem.out.println("This is not a triangle");}public static boolean isValid(double side1, double side2, double side3){int flag = 0;if((side1+side2)>side3)flag++;if((side3+side2)>side1)flag++;if((side1+side3)>side2)flag++;if(flag == 3)return true;elsereturn false;}public static double area(double side1, double side2, double side3){ double s=(side1 + side2 + side3)/2;double temp = s*(s-side1)*(s-side2)*(s-side3);double area = Math.sqrt(temp);return area;}}。
数据结构课程实验一 JAVA程序设计基础

实验报告一 JA V A 程序设计基础及算法设计班级________ 学号______ 姓名_____ 专业_____一、 实验目的:(1) 掌握JA V A 语言的语法,理解数组和对象的引用模型,理解类的封装、继承和多态(2) 掌握类的设计方法(3) 掌握异常处理方法和标准输出方法,了解标准输入方法(4) 熟悉算法的描述方法、算法时间复杂度的分析和计算方法(5) 理解数据和算法的基本概念二、 实验内容:1、 采用二维数据输出杨辉三角形,二维数据的结构如图1所示:mat[1] mat[2] mat[3] mat[4] mat[5]图1 杨辉三角形的二维数组结构请粘贴源程序及运行测试结果:源程序:import java.util.Scanner;public class Ex {public static void pri( int a[][], int x){for (int i=0;i<x;i++){for (int j=0;j<=i;j++){System.out .printf("%5d" ,a[i][j]);}System.out .println();}}public static int [][] Def(int x){int a[][]=new int [x][x];for (int i=0;i<x;i++){a[i][0]=1;a[i][i]=1;}for (int i=2;i<x;i++){for (int j=1;j<i;j++){a[i][j]=a[i-1][j]+a[i-1][j-1];}}return a;}public static void main(String[] args){ Scanner scan=new Scanner(System.in );System.out.println("输入维数:");int x=scan.nextInt();int a[][]=Def(x);scan.close();pri(a,x);}}运行结果:2、找出一个二维数据的鞍点,即该位置上的元素在该行上最大,在该列中最小。
数据结构实验指导书(JAVA版)

数据结构实验指导书(JAVA版)实验一、单链表的基本操作一、实验目的1、掌握线性链表的操作特点,即指针是逻辑关系的映像。
2、掌握动态产生单链表的方法。
3、熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。
4、熟练掌握单链表的取元素操作二、实验内容1、定义单链表类型并动态创建单链表;2、实现单链表的取元素操作、插入操作和删除操作;3、实现输出单链表中各元素值的操作;4、将单链表中的最小元素移到最前面。
三、实验环境eclipse环境四、实验步骤1、定义单链表节点类;2、定义单链表类,并实现单链表的创建、插入、删除、取元素操作和将单链表中的最小元素移到最前面的操作;3、从键盘上依次输入21、75、30、18、42、56,顺序或逆序创建单链表,并输出单链表中的各元素值;5、分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值;6、删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值;7、取单链表中的第5个数据元素和第7个数据元素;8、将单链表中的最小元素移到最前面,并输出单链表中的各元素以检查操作是否正确实现。
五、问题讨论1、单链表具有什么优缺点?2、单链表的定义与顺序表的定义有什么区别?3、逆序创建单链表有什么好处?六、实验报告内容1、实验目的2、实验内容和具体要求3、完成情况和实验记录,实验记录为实验过程中遇到的问题及解决方法4、程序清单5、所输入的数据及相应的运行结果6、问题讨论回答7、实验心得实验二、二叉树的遍历和二叉查找树一、实验目的1、掌握二叉树的特点及其存储方式;2、掌握二叉树的创建;3、掌握二叉树前序、中序、后序遍历的基本方法及应用;4、掌握二叉查找树的特点;5、掌握二叉查找树查找(包含contain)、插入和删除操作的实现。
二、实验内容1、用前序方法建立一棵二叉树;2、实现前序、中序和后序遍历二叉树的操作;3、实现统计二叉树叶子结点个数或计算二叉树深度的操作;4、将输入的一组数据逐个插入实现创建二叉查找树;5、用非递归实现二叉查找树的查找和删除操作。
JAVA实验报告--6个实验

three=newComputerAver(four);
two=newDelScore(three);
one=newInputScore(two);
}
publicvoidgivePersonScore(){
one.inputScore();
}
}
publicclassComputerAver {
姓名
学号
实验组
实验时间
指导教师
吴红梅
成绩
实验项目名称
上机实践二 运算符、表达式和语句
实验环境
Eclipse
实验内容及结果
实验一托运行李
charge=(int)weight*trainCharge;
charge=(int)(weight+0.5)*carCharge;
charge=(int)(weight*1000+0.5)*planeCharge;
运行结果:tank1的炮弹数量:9
tank2的炮弹数量:8
实验三家族的姓氏
【代码1】FamilyPerson.surname="李";
【代码2】father.setName("向阳");
【代码3】father.setSurname("张");
运行结果:父亲:张向阳
大儿子:张抗日
二儿子:张抗战
指导教师意见
姓名
学号
实验组
实验时间
指导教师
吴红梅
成绩
实验项目名称
实验环境
Eclipse
实验内容及结果
实验一Tank类
【代码1】double speed;
java实验实验报告

java实验实验报告Java 实验实验报告一、实验目的本次 Java 实验的主要目的是通过实际操作和编程实践,深入理解和掌握 Java 编程语言的基本概念、语法结构、面向对象编程的思想以及常用类库的使用。
同时,培养我们解决实际问题的能力和编程思维,提高代码的质量和可读性。
二、实验环境1、操作系统:Windows 102、开发工具:IntelliJ IDEA3、 JDK 版本:18三、实验内容(一)基本语法练习1、数据类型与变量在 Java 中,我们学习了不同的数据类型,如整数类型(`int`、`long`)、浮点数类型(`float`、`double`)、字符类型(`char`)和布尔类型(`boolean`)。
通过定义和使用这些变量,我们能够存储和操作各种类型的数据。
```javaint age = 25;double salary = 500050;char grade ='A';boolean isStudent = true;```2、控制结构包括条件语句(`ifelse`、`switch`)和循环语句(`for`、`while`、`dowhile`)。
这些控制结构使我们能够根据不同的条件执行不同的代码块,或者重复执行一段代码。
```javaint num = 10;if (num > 5) {Systemoutprintln("Number is greater than 5");} else {Systemoutprintln("Number is less than or equal to 5");}switch (num) {Systemoutprintln("One");break;case 10:Systemoutprintln("Ten");break;default:Systemoutprintln("Unknown");}for (int i = 0; i < 5; i++){Systemoutprintln(i);}int count = 0;while (count < 3) {Systemoutprintln("Count: "+ count);count++;}count = 0;Systemoutprintln("Count: "+ count);count++;} while (count < 3);```(二)面向对象编程1、类与对象创建了自定义的类来表示现实世界中的实体。
实验一 数据结构java单链表实验

实验一单链表实验
一、实验目的
1、熟悉JDK开发环境。
2、熟悉JCreator编辑器的使用。
3、掌握用上机调试单链表的基本方法。
2、掌握单链表的插入、删除、修改等算法的实现。
二、实现内容
1、单链表基本操作的实现
[问题描述]
首先创建单链表,申请一个结点空间,并置x为其数据域值,最后修改前一个结点的指针指向新插入结点。
第二,对单链表中的符合要求的数据删除。
并要在带头结点的单链表h中进行寻找给定键值的数据。
然后再删除相关节点,释放空间。
第三,对符合要求的数据进行修改,在带头结点的单链表h中进行寻找给定键值的数据。
然后对该数据进行修改。
[基本要求]用链式存储结构实现存储
[实现提示]链式存储结构不是随机存储结构,即不能直接取到单链表中某个结点,而要从单链表的头结点开始一个一个地计数寻找,比较给定键值,确定查找位置,在作相关操作。
[程序实现]
三、思考题
1.输入10组数据测试,分别完成,插入、删除、修改等操作。
2.修改所给代码,用单链表的方式实现通讯录,可以对通讯录作插入、删除、显示、
修改等操作。
3.如果要删除第i个数据元素,应该如何修改前述算法?
4.分析实例程序的各个模块功能,分别写出实例程序的插入、删除、修改等算法的
实现过程。
5.分析比较循环单链表的插入、删除、修改算法和本算法的不同点。
1。
数据结构_java_实验1指导

实验一线性表及其应用一、实验目的1.掌握数据结构中线性表的基本概念。
2.熟练掌握线性表的基本操作,插入、删除、查找,以及线性表合并等运算在顺序存储结构和链接存储结构上的实现。
3.熟练掌握链表的各种操作和应用。
二、本实验使用的接口public interface SimpleList {/***返回此列表中的元素个数。
此列表中的元素个数@return**/int size();/**将指定的元素插入到此列表中的指定位置。
** @param obj 要插入的元素* @param index 指定元素插入位置的索引如果索引超出范围ArrayIndexOutOfBoundsException*@throws*/void insert(Object obj, int index);/**删除此列表中指定位置的元素。
** @param index 要删除元素的索引如果索引超出范围ArrayIndexOutOfBoundsException@throws**/void delete(int index);/**返回列表中指定位置的元素。
** @param index 指定的索引指定索引处的元素@return*如果索引超出范围ArrayIndexOutOfBoundsException@throws**/Object get(int index);}三、实验内容1.设计一个带头结点的循环单链表类。
(1)要求z实现SimpleList接口,成员函数包括取数据元素个数、插入、删除、取数据元素。
z设计一个测试主函数,实际运行验证其各成员函数的正确性。
(2)测试z将1,2,3,…,9,10依次插入链表;z将0插入到索引为0的地方;z将100插入到链表末端;z删除索引为10的元素;z根据当前链表元素个数依次取得数据元素并打印。
(3)算法思想参见教材第二章。
注意:每次包含索引操作时检查索引是否合法,插入、删除操作时正确调整size大小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int b=reader.nextInt(); int c=reader.nextInt(); System.out.println("gcd("+a+","+b+","+c+")="+gcd(gcd(a,b),c)); System.out.println("zxg("+a+","+b+")="+zxg(a,b)); } public static int gcd(int a, int b) { if(b==0) return a; if(a<0) return gcd(-a, b); if(b<0) return gcd(a, -b); return gcd(b, a%b); } public static int zxg(int a, int b) { return a*b/gcd(a,b); } }
return true; }
}
判断对象数组元素是否已按升序排序
public class Zuoye1_2 { public static void main(String[] args) { Integer[] a=new Integer[10]; for(int i=0;i<10;i++){ a[i]=new Integer(i); } System.out.println(isSorted(a)); } public static boolean isSorted(Comparable[] table) { if (table==null) return false; for (int i=0; i<table.length-1; i++) if (table[i].compareTo(table[i+1])>0) return false; return true; }
(2) 数组逆置。
将一个已知数组中所有元素的次序颠倒为相反次序,求算法的时间复杂度和空间复杂度。
(3) 用递归算法求两个整数的最大公因数。
设有不全为 0 的两个整数 a 和 b,记 gcd(a,b)为他们的最大公因数,即同时能整除 a 和 b 的公 因数中的最大者。按照欧几里德(Euclid)的辗转相除法。gcd(a,b)具有如下性质:
用递归算法实现 gcd(a,b),并给下列调用: ①求两个整数 a,b 的最小公倍数;②求三个数 a,b,c 的最大公约数
3、 实验步骤与结果 (3 分)
(1)○1 审题。确定题目所要求的方法是实现判断整数数组(对象数组)是否已按 升序排序的功能。
○2 编程。创建一个主类,定义一个整数数组(对象数组),利用输出语句输 出实现该方法得到的结果。定义 isSorted()方法,先判断输入数组是否为空,若 为空,则返回 flase;然后利用一个循环语句,逐个判断第 i 个元素是否比第 i+1 个元素大,若发现这种情况,则返回 false,否则为 true。
验证结果。输入一系列数据,验证结果是否符合程序要求。
图1
(2)○1 审题。确定题目所要求的方法是实现数组逆置。 ○2 编程。创建一个主类,给出 main 方法,定义一个数组,利用输出语句
输出该方法得到的结果。定义 yizhi()方法,判断数组是否为空,若为空,则返回 flase;然后利用一个循环语句,从第一个元素和最后一个元素的逆置开始实现数 组元素的逆置。
图3
4、 源码(2 分)
(1)判断整数数组元素是否已按升序排序
public class Zuoye1_1 { public static void main(String args[]){ int a[]={1,2,3,4}; System.out.print(isSorted(a)); } public static boolean isSorted(int[] table){ int min=table[0]; for(int i=1,temp=table.length;i<temp;i++){ if(min>table[i]) return false; min=table[i]; }
了解数据结构课程的目的,性质和主要内容,理解数据结构和算法的基本概念,熟悉算法的 描述方法,算法时间复杂度和空间复杂度的分析和计算方法。
2、 实验内容(2 分)
(1) 判断已按升序排序。
实现 isSorted()方法判断整数(对象)数组元素是否已按升序排序,生命如下: Public static boolean isSorted(int[] table) //判断整数数组是否已按升序排序 Public static boolean isSorted(Comparable[] table)// 判断对象数组是否已按升序排序
5、 结论与讨论(2 分)
通过本次实验的学习,我们总结了以下几点:①在编程时,编程的方案有 很多种,但要选择尽量使语句能够简便化的方案。②编程过程用到循环语句时, 要选择正确的且能便于我们更好地完成算法的语句。③递归策略只需少量的程序 就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。合理 利用递归,是完成算法的关键。④合理的分配给队员任务能使工作量和工作时间 大大缩减。
}
(3) 用递归算java.util.*; public class Zuoye3_2{ public static void main(String args[]) { Scanner reader=new Scanner(System.in); int a=reader.nextInt();
验证结果。输入一系列数据,验证结果是否符合程序要求。
图2 结果可知时间复杂度和空间复杂度均是 O(n) (3)○1 审题。确定题目所要求的方法是实现利用递归算法求两个整
数的最大公因数。 ○2 编程。创建一个主类,给出 main 方法,然后定义 3 个整型变量, 利用输出语句输出实现方法所得到的结果。定义 gcd(int a,int b)方法,先判断除 数是否为 0,若为 0,则返回被除数。判断 a,b 正负,取其绝对值,在 gcd(int a,int b)方法中返回 gcd(b,a%b); .验证结果。输入一系列数据,验证结果是否符合程序要求。
}
(2) 数组逆置
public class Zuoye2_1 { public static void main(String[] args) { int[] table={1,2,3,4,5,6,7,8}; int k=0; for(int i=0;i<table.length/2;i++){ k=table[table.length-i-1]; table[table.length-i-1]=table[i]; table[i]=k; } for(int i=0;i<table.length;i++) System.out.println(table[i]); }
班级
《数据结构(JAVA)》综合性、设计性实验成绩单
学号
姓名
开设时间:
实 验 实验一 算法设计与分析 题 目
成绩
教师签名
《数据结构(JAVA)》
实验报告
实验题目:
算法设计与分析
指导教师:
实验组长(姓名+学号):
组员(姓名+学号):
实验时间:
年月日
组长签名:
年 月日
一、实验报告撰写提纲
1、 实验目的(1 分)