数据结构java实验四

合集下载

Java语言程序设计实验四 方法及数组实验报告

Java语言程序设计实验四 方法及数组实验报告
实验名称: 班 级:报告
实验四 方法及数组
姓 名:
学 号:
日 期:
一、实验目的: 1、掌握数组的定义和使用方法 2、熟悉数组的排序、查找等算法
二、实验环境: 有 Java 环境的计算机若干台
三、实验内容和要求:
1、定义一个 10 个元素的数组,要求从键盘输入(Scanner 类,循环输入),并在里面查 找某个数据,找到输出“有”,没有这个数提示“无”。
思路:使用 Scanner 类输入数组元素,然后再输入要查找的元素,循环比较查找。
2、编写一个数组处理类,要求里面有这样的两个方法,第一个方法,可以对输入的数 组进行排序,第二个方法可以删除指定位置的数组元素;然后再写一个主类,测试上面 这个类的正确性。 思路:第一个类框架 class first{
System.out.println("无"); } }
2: package syyyy;
import java.util.*; class first {
public void sort(int []a) { int i,j,k,temp; for(i=0;i<a.length;i++) {
k=i; for(j=i+1;j<a.length;j++) if(a[i]>a[j]) { temp=a[k]; a[k]=a[j]; a[j]=temp; } } } public boolean delelement(int [] a,int index) { int i; if(index>a.length-1)
a[i]=chm.nextInt(); } System.out.println("请输入要找的数"); t=chm.nextInt(); for(int j=0;j<10;j++) {

数据结构 java版 4

数据结构 java版 4
– getPrecedence – isVariable
2013年7月18日
17
Transforming Infix to Postfix
Fig. 21-9 Steps to convert the infix expression a / b * ( c + ( d – e ) ) to postfix form.
15
Infix-to-Postfix Algorithm
Symbol in Infix
Operand Operator ^ Operator +,-, *, or / Push ^ onto stack Pop operators from stack, append to output expression until stack empty or top has lower precedence than new operator. Then push new operator onto stack Push ( onto stack Pop operators from stack, append to output expression until we pop an open parenthesis. Discard both parentheses.
Stack&Queues
Stack ADT Stack Implementations Queues ADT Queues Implementations
2013年7月18日
Chapter Contents
Specifications of the ADT Stack Using a Stack to Process Algebraic Expressions

java实验报告4

java实验报告4

实验4 Java 语言面向对象基础编程一.实验目的(1)通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想(2)如何创建类和对象二、实验要求1、编写一个体现面向对象思想的程序;2、编写一个创建对象和使用对象的方法的程序;3、编写体现构造方法重载的程序;三.实验内容1、定义类创建类对象设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改(1)程序功能:设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的速率和停车两个操作。

源代码:(自己编写)创建类的对象,使用对象的方法(类的非静态方法)来访问或修改对象的变量(类的非静态变量)(1)创建上面第一步的类的对象,在调用类的构造函数时指定对象的变量的初始值,以后再使用对象的方法来访问或修改对象的变量的值。

源代码:2、构造方法重载构造方法的名称和类同名,没有返回类型。

尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。

因此,构造方法不能直接调用,只能由new 操作符调用。

构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。

重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。

源代码如下:class RunDemo {private String userName, password;在该处编写不带参数的构造方法在该处编写带一个参数的构造方法在该处编写带两个参数的构造方法}public class EXP2 {public static void main(String[] args) {//使用不同的构造方法进行对象的初始化}}3、调用方法时参数传递的练习在Java 中,方法中的参数传递可以分为传值调用或对象方法调用等方式。

数据结构(java)实验4.1

数据结构(java)实验4.1

实验四数组、集合和矩阵及其应用一、实验目的1.熟悉数组、集合和矩阵的基本概念、存储表示和实现。

2.熟练掌握数组、集合和矩阵的有关操作和应用。

二、实验内容1.对于MyVector类●设计和编写删除全部数据元素的成员函数removeAll()。

●设计一个测试程序,测试上述新增的成员函数。

2.设计一个集合(Set)抽象数据类型接口(SimpleSet)和其实现类(MySet)●要求接口SimpleSet包含集合常见的操作(参见教材19页),包括集合的并、交、差、相等、真子集等基本操作以及集合元素的输出等操作。

●设计和编写实现类MySet中的两个集合的并、两个集合的交和两个集合的差等成员函数。

●设计和编写实现类MySet中的比较两个集合相等否的成员函数equals1(MySet),调用集合的包含成员函数include(MySet)来实现。

●设计和编写实现类MySet中的比较集合相等与否的成员函数equals2(MySet),要求通过调用属于成员函数contains(obj)来实现。

●设计和编写实现类MySet中的真子集成员函数。

集合A是集合B的真子集,是指集合A是集合B的子集,同时集合B中至少有一个数据元素在集合A中没有。

●为了能够使集合中数据元素的数据类型可以为任意的类类型,练习使用泛型来定义接口和类。

●设计一个测试程序,测试上述接口、实现类和新增的成员函数。

3.对于Matrix类●设计和编写Matrix类的添加一行成员函数,要求在矩阵的最后一行后边添加一行。

●设计和编写Matrix类的添加一行成员函数,要求在矩阵指定行下标index前添加一行。

●设计和编写Matrix类的添加一列成员函数,要求在矩阵的最后一列后边添加一列。

●设计和编写Matrix类的添加一列成员函数,要求在矩阵指定列下标index前添加一列。

●设计和编写Matrix类的删除一行成员函数,要求在矩阵指定的index一行。

●设计和编写Matrix类的删除一列成员函数,要求在矩阵指定的index一列。

Java数据结构实验报告

Java数据结构实验报告

Java数据结构实验报告Java数据结构实验报告引言:数据结构是计算机科学中非常重要的一个领域,它研究如何组织和存储数据,以便能够高效地访问和操作。

在本次实验中,我们将使用Java语言实现几种常见的数据结构,并进行性能测试和分析,以便更好地理解它们的特点和应用场景。

一、数组:数组是最简单的数据结构之一,它由相同类型的元素组成,并按照一定的顺序存储在连续的内存空间中。

在Java中,数组的长度是固定的,一旦创建后就无法改变。

我们可以通过索引来访问数组中的元素,这使得数组的访问速度非常快。

在本次实验中,我们通过比较不同大小的数组在插入、删除和查找操作上的性能表现,来分析数组的优缺点。

实验结果显示,数组在查找操作上的性能非常好,时间复杂度为O(1),但在插入和删除操作上的性能较差,时间复杂度为O(n)。

因此,数组适用于那些需要频繁访问元素,但很少进行插入和删除操作的场景。

二、链表:链表是另一种常见的数据结构,它由节点组成,每个节点包含数据和指向下一个节点的指针。

与数组不同,链表的长度可以动态改变,这使得它更加灵活。

在Java中,链表有多种实现方式,如单链表、双向链表和循环链表等。

在本次实验中,我们比较了不同类型链表在插入、删除和查找操作上的性能表现。

实验结果显示,单链表在插入和删除操作上的性能非常好,时间复杂度为O(1),但在查找操作上的性能较差,时间复杂度为O(n)。

相比之下,双向链表在插入、删除和查找操作上都具有较好的性能,时间复杂度均为O(1)。

因此,链表适用于那些需要频繁进行插入和删除操作的场景。

三、栈和队列:栈和队列是两种特殊的数据结构,它们都是在一端进行插入和删除操作的。

栈遵循先进后出(LIFO)的原则,而队列遵循先进先出(FIFO)的原则。

在Java 中,栈和队列可以使用数组或链表来实现。

在本次实验中,我们通过比较数组栈、链表栈、数组队列和链表队列在插入、删除和查找操作上的性能表现,来分析它们的特点和适用场景。

合工大java实验报告-04

合工大java实验报告-04
2.编写网络程序时,需要处理哪些Exception?
答:错误的类型转换、数组越界访问和试图访问空指针。我在程序中遇到了最后一种。
五、实验结论、分析、思考题与心得体会
本次试验,花费了我一天的时间,虽然不能说全是自己做的,但是自己还是误就是在一个字符串的符号上。我将str1写成了str,这两个不是代表同一个字符串,结果在客户端始终输不出服务器端的字符串,这让我弄了好久好久。
3.服务器端在本地建立一个文本文件存储与客户端互传字符串的记录。
4.若服务器端可以同时连接多个不同的客户端该怎么设计?
答:设计为多线程,运用thread类,run函数。
三、使用硬件、软件环境
PC计算机一台,配置为CPU为1.5G,内存为512M,硬盘为40G,安装WindowsXP操作系统。
另外,使用JCreator,JDK1.6.0等软件
2.掌握Socket类、ServerSocket类、InputStreamReader类、File类和BufferedReader等系统类的使用方法。
3.掌握线程处理的方法。
二.实验内容
1.在服务器端通过指定一个用来等待的连接的端口号创建一个ServerSocket实例。
2.在客户端通过规定一个主机和端口号创建一个Socket实例,连到服务器上。
(提示:搜寻“计算机网络协议”方面的材料)
答:都有,只是TCP/IP比较主流,TCP是Internet的基础和核心,一种面向连接的保证可靠传输的协议,得到的是一个顺序无差错的数据流优点是在通信前要建立连接,所以安全、可靠。缺点是要等待对方回应,速度较慢。而UDP/IP是从一台计算机向另一台计算机发送称为数据报的独立数据包的协议,该协议并不保证数据报是否能正确地到达目的地。它是一个非面向连接的协议。UDP不需要建立连接,所以速度较快。不能保证传送的数据包按顺序到达,因此安全性较差。QQ等IM软件,一般均采用UDP协议。

java第四次实验报告

java第四次实验报告
this.month = month;
this.year = year;
this.day = day;
}
public void ChangeToDate(Date1 date) {
String Month[] =
{
"January","Februry","March", "April", "May","June",
{"drove","jumped","ran","walked","skiped"},
{"to","from","over","'under","on"},
{"the","a","one","some","any"},
{"boy","girl","dog","town","car"} };
TextArea output;
Button m;
int b,c;
public void init() {
output=new TextArea(25,50);
m=new Button("开始");
add(output);
add(m);
}
public boolean action(Event e,Object o){
output.setText ("");

Java数据结构实验报告

Java数据结构实验报告

Java数据结构实验报告《Java数据结构实验报告》摘要:本实验报告旨在介绍Java数据结构的相关知识,并通过实验验证其在实际应用中的效果。

通过对Java数据结构的学习和实验,我们可以更好地理解和掌握数据结构在软件开发中的重要性和应用方法。

1. 引言数据结构是计算机科学中的重要概念,它是指一组数据的组织方式和存储结构,是程序设计中最基本的概念之一。

Java作为一种广泛应用的编程语言,具有强大的数据结构支持,包括数组、链表、栈、队列、树等。

本实验报告将重点介绍Java数据结构的使用和实验结果。

2. 实验目的本实验旨在通过实际操作,掌握Java数据结构的基本概念、使用方法和实际应用。

具体包括以下几个方面:- 了解Java数据结构的基本概念和分类;- 掌握Java数据结构的常见操作和实现方法;- 通过实验验证Java数据结构在实际应用中的效果。

3. 实验内容本实验主要包括以下几个方面的内容:- 数组:学习数组的定义、初始化、访问和操作方法,并通过实验验证其效果;- 链表:学习链表的定义、插入、删除和遍历方法,并通过实验验证其效果;- 栈和队列:学习栈和队列的定义、操作方法,并通过实验验证其效果;- 树:学习树的定义、遍历和搜索方法,并通过实验验证其效果。

4. 实验结果通过实验,我们成功地掌握了Java数据结构的基本概念和操作方法,并验证了其在实际应用中的效果。

具体包括以下几个方面的结果:- 数组:我们成功地实现了数组的初始化、访问和操作,并验证了其在存储和检索数据方面的效果;- 链表:我们成功地实现了链表的插入、删除和遍历,并验证了其在数据组织和操作方面的效果;- 栈和队列:我们成功地实现了栈和队列的操作,并验证了其在数据存储和处理方面的效果;- 树:我们成功地实现了树的遍历和搜索,并验证了其在数据组织和检索方面的效果。

5. 结论通过本实验,我们对Java数据结构有了更深入的理解和掌握,了解了其在实际应用中的重要性和作用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构(JA V A)》综合性、设计性实验成绩单开设时间:2012学年第一学期《数据结构(JA V A)》实验报告实验题目:树和二叉树的基本操作指导教师:实验组长(姓名+学号):组员(姓名+学号):实验时间:组长签名:一、实验报告撰写提纲1、实验目的1.理解二叉树的定义、性质、存储结构等基本概念,掌握二叉树类的设计方法,以及遍历、插入、删除等二叉树操作的算法实现;掌握采用链式存储结构表达非线性结构的设计方法;掌握采用递归算法实现递归数据结构基本操作的设计方法。

2.熟悉树的定义、表示、存储结构和遍历,具备使用树各种操作的能力。

2、实验内容(1)在一棵二叉链表表示的二叉树中,实现以下操作,并说明采用哪种遍历算法,其他遍历算法是否可行。

①输入叶子结点。

②求二叉树中叶子结点个数。

③将每个结点的左子树与右子树交换。

④验证二叉树的性质3:n0=n2+1。

⑤输出值大于k的结点。

⑥已知先根和中根次序遍历序列构造二叉树。

⑦以广义表表示构造二叉树。

⑧判断两颗二叉树是否相等。

⑨求结点所在的层次。

⑩求一颗二叉树在后根次序遍历下第一个访问的结点。

⑪复制一颗二叉树。

⑫判断一颗二叉树是否为完全二叉树。

⑬实现二叉树后根次序遍历的非递归算法。

(2)声明三叉链表表示的二叉树类,实现二叉树的基本操作以及以下操作。

①构造一颗三叉链表表示的二叉树。

②返回指定结点的父母结点。

③返回指定结点的所有祖先结点。

④返回两结点最近的共同祖先结点。

(3)在一颗中序线索二叉树中,实现以下操作。

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

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

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

④插入、删除操作。

3、实验步骤与结果(1)①审题:在一棵二叉链表表示的二叉树中,实现以下操作,并说明采用哪种遍历算法,其他遍历算法是否可行。

①输入叶子结点。

②求二叉树中叶子结点个数。

③将每个结点的左子树与右子树交换。

④验证二叉树的性质3:n0=n2+1。

⑤输出值大于k的结点。

⑥已知先根和中根次序遍历序列构造二叉树。

⑦以广义表表示构造二叉树。

⑧判断两颗二叉树是否相等。

⑨求结点所在的层次。

⑩求一颗二叉树在后根次序遍历下第一个访问的结点。

⑪复制一颗二叉树。

⑫判断一颗二叉树是否为完全二叉树。

⑬实现二叉树后根次序遍历的非递归算法。

②编程:这道小题需要用到几个类,分别是结点类Node,树结点类BinaryNode,顺序栈LinkedStack,顺序队列LinkedQueue,然后编写BinaryTree类,逐一实现以上功能。

验证类为yanzheng。

③验证结果:图1图2图3图4图5图6图7图8图9图10图11图12图13(2)①审题:(2)声明三叉链表表示的二叉树类,实现二叉树的基本操作以及以下操作。

①构造一颗三叉链表表示的二叉树。

②返回指定结点的父母结点。

③返回指定结点的所有祖先结点。

④返回两结点最近的共同祖先结点。

②编程:编写结点类TriNode,然后编写TriBinaryNode类实现二叉树的各个功能和方法。

验证类为yanzheng2.③验证结果:图14(3)①审题:(3)在一颗中序线索二叉树中,实现以下操作。

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

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

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

④插入、删除操作。

②编程:编写结点类ThreadNode,然后编写中性线索二叉树ThreadTreee逐一实现各个功能。

验证类为yanzheng3.③验证结果:图15图16图174、源码(1)BinaryTree类package实验4;public class BinaryTree<T>{public BinaryNode<T> root;public BinaryTree(){t his.root=null;}public void preOrder(){System.out.print("先根次序遍历二叉树:");preOrder(root);System.out.println();}public void preOrder(BinaryNode<T> p){if(p!=null){System.out.print(p.data.toString()+" ");preOrder(p.left);preOrder(p.right);}}public BinaryTree(T prelist[]){this.root=create(prelist);}private int i=0;public BinaryNode<T> create(T prelist[]){BinaryNode<T> p=null;if(i<prelist.length){T elem=prelist[i];i++;if(elem!=null){p=new BinaryNode<T>(elem);p.left=create(prelist);p.right=create(prelist);}}return p;}public BinaryNode<T> search(T key){//①输入叶子结点。

return search(root,key);}public BinaryNode<T> search(BinaryNode<T> p,T key){if(p==null||key==null)return null;if(p.data.equals(key))return p;BinaryNode<T> find=search(p.left,key);if(find==null)find=search(p.right,key);return find;}public BinaryNode<T> insertChild(BinaryNode<T> p,T x){if(p==null||x==null)return null;if(p.left==null){p.left=new BinaryNode<T>(x,null,null);return p.left;}else p.right=new BinaryNode<T>(x,null,null);return p;}public int yecount(){//②求二叉树中叶子结点个数。

return yecount(root);}public int yecount(BinaryNode<T> p){if(p==null)return 0;if(p!=null&&p.left==null&&p.right==null)return 1;return yecount(p.left)+yecount(p.right);}public BinaryNode<T> JHjiedian(){//③将每个结点的左子树与右子树交换。

return JHjiedian(root);}public BinaryNode<T> JHjiedian(BinaryNode<T> p){BinaryNode<T> q=null;q=p.left;p.left=p.right;p.right=q;if(p.left!=null){JHjiedian(p.left);}if(p.right!=null){JHjiedian(p.right);}return p;}public int twoyezi(){ //④验证二叉树的性质3:n0=n2+1。

return twoyezi(root);}public int twoyezi(BinaryNode<T> p){int i,j;if(p==null)return 0;else{i=twoyezi(p.left);j=twoyezi(p.right);if(p.left!=null&&p.right!=null)return i+j+1;elsereturn (i+j);}}public void DaJieDina(T value){//⑤输出值大于k的结点。

System.out.print("大于"+value+"的结点有:");BinaryNode<T> p = this.root;DaJieDina(p, value);System.out.println();}public void DaJieDina(BinaryNode<T> p, T value){if (p != null){if (((String) p.data).compareTo((String)value) > 0)System.out.print(p.data.toString() + " ");DaJieDina(p.left, value);DaJieDina(p.right, value);}}public BinaryTree(T prelist[],T inlist[]){//⑥已知先根和中根次序遍历序列构造二叉树。

this.root=create(prelist,inlist,0,0,prelist.length);}private BinaryNode<T> create(T prelist[],T inlist[],int preStart,int inStart,int n){if(n<=0)return null;T elem=prelist[preStart];BinaryNode<T> p=new BinaryNode<T>(elem);int i=0;while(i<n&&!elem.equals(inlist[inStart+i]))i++;p.left=create(prelist,inlist,preStart+1,inStart,i);p.right=create(prelist,inlist,preStart+i+1,inStart+i+1,n-1-i);return p;}public String toGenListString(){//⑦以广义表表示构造二叉树。

return"广义表表示为:"+toGenListString(root)+"\n";}public String toGenListString(BinaryNode<T> p){if(p==null)return null;String str=p.data.toString();if(p.left!=null||p.right!=null)str+="("+toGenListString(p.left)+","+toGenListString(p.right)+")";return str;}public boolean compareTree(BinaryNode<T> root2){//⑧判断两颗二叉树是否相等。

相关文档
最新文档