JAVA典型数据结构实现与操作
Java数据结构和算法

Java数据结构和算法一、数组于简单排序 (1)二、栈与队列 (4)三、链表 (7)四、递归 (22)五、哈希表 (25)六、高级排序 (25)七、二叉树 (25)八、红—黑树 (26)九、堆 (36)十、带权图 (39)一、数组于简单排序数组数组(array)是相同类型变量的集合,可以使用共同的名字引用它。
数组可被定义为任何类型,可以是一维或多维。
数组中的一个特别要素是通过下标来访问它。
数组提供了一种将有联系的信息分组的便利方法。
一维数组一维数组(one-dimensional array )实质上是相同类型变量列表。
要创建一个数组,你必须首先定义数组变量所需的类型。
通用的一维数组的声明格式是:type var-name[ ];获得一个数组需要2步。
第一步,你必须定义变量所需的类型。
第二步,你必须使用运算符new来为数组所要存储的数据分配内存,并把它们分配给数组变量。
这样Java 中的数组被动态地分配。
如果动态分配的概念对你陌生,别担心,它将在本书的后面详细讨论。
数组的初始化(array initializer )就是包括在花括号之内用逗号分开的表达式的列表。
逗号分开了数组元素的值。
Java 会自动地分配一个足够大的空间来保存你指定的初始化元素的个数,而不必使用运算符new。
Java 严格地检查以保证你不会意外地去存储或引用在数组范围以外的值。
Java 的运行系统会检查以确保所有的数组下标都在正确的范围以内(在这方面,Java 与C/C++ 从根本上不同,C/C++ 不提供运行边界检查)。
多维数组在Java 中,多维数组(multidimensional arrays )实际上是数组的数组。
你可能期望,这些数组形式上和行动上和一般的多维数组一样。
然而,你将看到,有一些微妙的差别。
定义多维数组变量要将每个维数放在它们各自的方括号中。
例如,下面语句定义了一个名为twoD 的二维数组变量。
int twoD[][] = new int[4][5];简单排序简单排序中包括了:冒泡排序、选择排序、插入排序;1.冒泡排序的思想:假设有N个数据需要排序,则从第0个数开始,依次比较第0和第1个数据,如果第0个大于第1个则两者交换,否则什么动作都不做,继续比较第1个第2个…,这样依次类推,直至所有数据都“冒泡”到数据顶上。
java中常用的数据结构

java中常用的数据结构
Java中常用的数据结构有:
1. 数组(Array):一组具有相同类型的数据元素的集合,通
过索引来访问元素。
2. 链表(LinkedList):由若干个节点组成,每个节点包含数
据和指向下一个节点的指针。
3. 栈(Stack):一种后进先出(LIFO)的数据结构,只允许
在栈顶进行插入和删除操作。
4. 队列(Queue):一种先进先出(FIFO)的数据结构,只允
许在队头和队尾进行插入和删除操作。
5. 集合(Set):一种不允许重复元素的数据结构,常见的实
现类有HashSet和TreeSet。
6. 列表(List):一种有序的数据结构,允许重复元素,常见
的实现类有ArrayList和LinkedList。
7. 字典(Map):一种键值对的数据结构,以键作为唯一标识
符来存储和访问元素,常见的实现类有HashMap和TreeMap。
8. 堆(Heap):一种可以快速找到最大值(或最小值)的数
据结构,常用于优先队列的实现。
9. 树(Tree):一种层次关系的数据结构,包含根节点、子节
点和叶子节点等。
10. 图(Graph):由节点和节点之间的关系(边)组成的数据结构,常用于描述网络等复杂关系。
这些数据结构在Java中都有对应的类或接口,可以根据具体
的需求选择合适的数据结构来使用。
java堆栈的用法

java堆栈的用法Java中的堆栈是一种非常重要的数据结构,它可以帮助我们管理程序中的动态数据。
在Java中,堆栈通常用于实现函数调用、异常处理、内存分配等功能。
本文将介绍Java堆栈的用法,帮助您更好地理解和应用它。
一、堆栈的基本概念堆栈是一种后进先出(LIFO)的数据结构,它由一系列元素组成,每个元素都有一个与之关联的键和一个与之关联的值。
堆栈中的元素按照键的顺序进行排序,最底部的元素具有最小的键值。
堆栈有两个主要操作:push和pop。
push操作将一个元素添加到堆栈的顶部,而pop操作则从堆栈的顶部移除一个元素。
在Java中,堆栈通常由Stack类实现。
Java中的Stack类是一个单向链表,它实现了面向对象编程中的堆栈数据结构。
1.创建堆栈对象在Java中,可以使用new关键字创建Stack对象,如下所示:```javaStack<Integer>stack=newStack<Integer>();```这里,我们使用泛型<Integer>定义了一个整型堆栈。
通过创建Stack对象,我们可以使用它来实现LIFO堆栈功能。
2.入堆栈操作(push)入堆栈操作将元素添加到堆栈的顶部。
在Java中,可以使用push()方法来实现这个操作。
例如:```javastack.push(1);//将元素1添加到堆栈顶部```注意:入堆栈操作只能在非空堆栈上进行。
如果堆栈为空,将抛出异常。
3.出堆栈操作(pop)出堆栈操作从堆栈顶部移除一个元素。
在Java中,可以使用pop()方法来实现这个操作。
例如:```javaintelement=stack.pop();//从堆栈顶部移除一个元素,并将其赋值给变量element```注意:出堆栈操作会移除并返回堆栈顶部的元素,但并不会改变堆栈的大小。
如果堆栈为空,将抛出异常。
4.查看堆栈内容可以使用peek()方法来查看堆栈顶部的元素,而不需要将其移除。
java基础常用的方法

java基础常用的方法Java基础常用的方法Java作为一门流行的编程语言,拥有着丰富的基础方法。
本文将介绍一些Java基础常用的方法,帮助读者更好地理解和使用这门语言。
一、字符串处理方法在Java中,字符串是一种常用的数据类型,因此字符串处理方法也是开发中常用到的。
下面是一些常见的字符串处理方法:1. length():返回字符串的长度。
javaString str = "Hello World";int len = str.length(); len的值为112. charAt():返回指定索引位置的字符。
javaString str = "Hello World";char ch = str.charAt(4); ch的值为'o'3. substring():返回指定索引范围内的子串。
javaString str = "Hello World";String subStr = str.substring(6); subStr的值为"World"4. concat():将指定字符串连接到原字符串末尾。
javaString str1 = "Hello";String str2 = "World";String result = str1.concat(str2); result的值为"HelloWorld"5. replace():替换字符串中的指定字符或子串。
javaString str = "Hello World";String newStr = str.replace('o', 'a'); newStr的值为"Hella Warld"6. toUpperCase()和toLowerCase():将字符串转换为大写或小写。
Java面向对象编程实战案例

Java面向对象编程实战案例1. 简介Java面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它以对象为中心,通过封装、继承和多态等特性来组织和管理代码。
本文将介绍一些实战案例,展示Java面向对象编程的实际应用。
2. 案例一:学生管理系统学生管理系统是一个典型的Java面向对象编程案例,它常用于学校、培训机构等管理学生信息。
在这个案例中,可以定义一个Student类,包含学生的姓名、年龄、学号等属性,以及学生的增删改查等方法。
可以使用面向对象的思想,将学生信息封装到一个对象中,并使用集合类来管理多个学生对象。
3. 案例二:图形计算器图形计算器是另一个有趣的Java面向对象编程案例。
可以定义一个Shape类作为图形的基类,包含计算图形面积和周长的方法,并派生出Circle、Rectangle和Triangle等子类,分别表示圆形、长方形和三角形。
通过面向对象的继承特性,可以调用对应子类的计算方法,根据用户的输入来计算所需图形的面积和周长。
4. 案例三:银行账户管理系统银行账户管理系统是一个常见的Java面向对象编程案例,用于管理银行的账户信息。
可以定义一个Account类,包含账户的姓名、余额、存取款等方法,并通过封装特性将账户信息隐藏在对象中。
可以使用ArrayList类来存储多个账户对象,实现对账户信息的管理和操作。
5. 案例四:图书馆管理系统图书馆管理系统是另一个典型的Java面向对象编程案例,用于管理图书馆的图书信息。
可以定义一个Book类,包含图书的书名、作者、价格等属性,并封装对应的get和set方法。
可以使用HashMap类来存储图书编号和对应的图书对象,实现图书的检索和借还功能。
还可以定义一个User类表示图书馆的用户,包含用户的姓名、借书数量等属性。
6. 案例五:游戏角色管理系统游戏角色管理系统是一个有趣的Java面向对象编程案例,用于管理游戏中的角色信息。
JAVA数据结构——单链表的操作

单链表的操作方法一:package ch02;(1)建立结点类Node.javapublic class Node {public Object data;//存放结点数据值public Node next;//存放后继结点//无参构造函数public Node(){ this(null,null);}//只有结点值的构造函数public Node(Object data){ this(data,null);}//带有节点值和后继结点的构造函数public Node(Object data,Node next){ this.data=data;this.next=next;}}(2)建立链表及操作LinkList.javapackage ch02;import java.util.Scanner;public class LinkList implements IList{public Node head;//单链表的头指针//构造函数初始化头结点public LinkList(){head=new Node();}//构造函数构造长度为n的单链表public LinkList(int n,boolean Order) throws Exception{ this();if(Order)create1(n); //头插法顺序建立单链表elsecreate2(n); //尾插法逆序建立单链表}//头插法顺序建立单链表public void create1(int n) throws Exception{Scanner sc=new Scanner(System.in);System.out.println("请输入结点的数据(头插法):”);for(int i=0;i<n;i++){insert(0,sc.next());}}//尾插法逆序建立单链表public void create2(int n) throws Exception{Scanner sc=new Scanner(System.in);System. out.println("请输入结点的数据(尾插法):");for(int i=0;i<n;i++){insert(length(),sc.next());}}//将链表置空public void clear(){head.data=null;head.next=null;}//判断链表是否为空public boolean isEmpty(){return head.next==null;}//返回链表长度public int length(){Node p=head.next;int length=0;while(p!=null){p=p.next;length++;//返回P不空长度length加1}return length;}//读取并返回第i个位置的数据元素public Object get(int i) throws Exception {Node p=head.next;int j;//从首结点开始向后查找,直到9指向第i个结点或者p为nullfor(j=0;j<i&&p!=null;j++){ p=p.next;}if(j>i||p==null)//i不合法时抛出异常throw new Exception("第"+i+”个数据元素不存在”);return p.data;}//插入乂作为第i个元素public void insert(int i, Object x) throws Exception{ Node p=head;int j=-1;//寻找第i个结点的前驱i-1while(p!=null&&j<i-1){p=p.next;j++;}if(j>i-l||p==null)//i不合法时抛出异常throw new Exception("插入位置不合法”);Node s=new Node(x);s.next=p.next;p.next=s;}//删除第i个元素public void remove(int i) throws Exception{ Node p=head;int j=-1;while(p!=null&&j<i-1){//寻找第i-1 个节点p=p.next;j++;}if(j>i-1||p.next==null)throw new Exception("删除位置不合法”);p.next=p.next.next;}//返回元素x首次出现的位序号public int indexOf(Object x) {Node p=head.next;int j=0;while(p!=null&&!p.data.equals(x)){p=p.next;j++;if(p!=null)return j;elsereturn -1;}public void display(){Node p=head.next;while(p!=null){if(p.next==null)System.out.print(p.data);elseSystem.out.print(p.data+"f );p=p.next;}}}(3)建立测试类Test.javappublic class test {public static void main(String[] args) throws Exception { // TODO Auto-generated method stubScanner sc=new Scanner(System.in);boolean or;int xz,xx;System.out.println("请选择插入的方法:0、头插法,1、尾插法");xz=sc.nextInt();if(xz!=0)or=true;elseor=false;System. out.println("请插入的结点的个数:”);xx=sc.nextInt();LinkList L=new LinkList(xx,or);System.out.println("建立的链表为:");L.display();System.out.println();System.out.println("链表的长度:"+L.length());System. out.println(”请输入查找的结点的数据:”);Object x=sc.next();int position=L.indexOf(x);System.out.println("结点的数据为:"+x+"的位置为:"+position); System. out.println("请输入删除的结点的位置:”);int sr=sc.nextInt();L.remove(sr);L.display();System.out.println();System.out.println("链表的长度:"+L.length()); }品P rob I em & J a vs d oc / Declaration Q Error Log 里Con sole-M、、■=:termin8ted> test [3] [Java Application] C U &ert\Ad im i n i st rat o r\Ap p Data\L o cs I请选择插入.的方法:0、头插法,lv星插法请插入的特点的个数:请愉入结点的颓据(尾插法):A B C E D F建立的旌表为;A+B T C+E T D+F链表的长度:6请输入查找的结点的数据:结点的数据为:E的位置为:3请输入删除的结点的位置,R+B T E+DW道表的长度:S方法二(引入get和set方法)Package sy;import java.util.Scanner;//单链表的结点类public class Node {private Object data; //存放结点值private Node next; //后继结点的引用public Node() { //无参数时的构造函数this(null, null);}public Node(Object data) { // 构造值为data 的结点this(data, null);}public Node(Object data, Node next) {//构造值为data 和next 的结点构造函数this.data = data;this.next = next;}public Object getData() { return data;}public void setData(Object data) {this.data = data;}public Node getNext() { return next;public void setNext(Node next) { this.next = next;}}//实现链表的基本操作类public class LinkList {Node head=new Node();//生成一个带头结点的空链表//根据输入的一系列整数,以0标志结束,用头插法建立单链表public void creat() throws Exception {Scanner sc = new Scanner(System.in); //构造用于输入的对象for (int x=sc.nextInt(); x!=0; x=sc.nextInt()) //输入若干个数据元素的值(以0结束) insert(0, x);//生成新结点,插入到表头}//返回带头结点的单链表中第i个结点的数据域的值。
Java核心数据结构(List、Map、Set)原理与使用技巧

Java核⼼数据结构(List、Map、Set)原理与使⽤技巧JDK提供了⼀组主要的数据结构实现,如List、Set等常⽤数据结构。
这些数据都继承⾃java.util.Collection接⼝,并位于java.util包内。
⼀、List接⼝最重要的三种List接⼝实现:ArrayList、Vector、LinkedList。
它们的类图如下:可以看到,3种List均来⾃AbstratList的实现。
⽽AbstratList直接实现了List接⼝,并扩展⾃AbstratCollection。
ArrayList和Vector使⽤了数组实现,可以认为,ArrayList封装了对内部数组的操作。
⽐如向数组中添加、删除、插⼊新的元素或数组的扩展和重定义。
对ArrayList或者Vector的操作,等价于对内部对象数组的操作。
ArrayList和Vector⼏乎使⽤了相同的算法,它们的唯⼀区别可以认为是对多线程的⽀持。
ArrayList没有对⼀个⽅法做线程同步,因此不是线程安全的。
Vector中绝⼤多数⽅法都做了线程同步,是⼀种线程安全的实现。
因此ArrayList和Vector的性能特性相差⽆⼏。
LinkedList使⽤了循环双向链表数据结构。
LinkedList由⼀系列表项连接⽽成。
⼀个表项总是包含3个部分:元素内容、前驱表项和后驱表项。
如图所⽰:LinkedList的表项源码:private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}}⽆论LinkedList是否为空,链表都有⼀个header表项,它既是链表的开始,也表⽰链表的结尾。
数据结构 java语言描述 第2版 pdf

数据结构 java语言描述第2版 pdf数据结构是计算机科学中非常重要的一个概念,它是指在计算机内存中组织和存储数据的方式。
在实际的软件开发中,数据结构的设计和选择直接影响到程序的性能和效率。
而在数据结构中,最常用的编程语言之一就是Java。
Java作为一种面向对象的编程语言,提供了丰富的数据结构实现方式。
在Java中,常见的数据结构包括数组、链表、栈、队列、树、图等。
这些数据结构在不同情况下有着不同的应用场景和效率表现。
在Java中,可以通过自定义类的方式来实现各种数据结构。
例如,可以定义一个Node类来表示链表的节点,或者定义一个TreeNode类来表示树的节点。
通过这种方式,可以灵活地组织和操作数据,实现各种复杂的数据结构。
除了自定义类之外,Java还提供了一些集合类来实现常见的数据结构。
例如,ArrayList和LinkedList类实现了动态数组和链表,Stack和Queue接口实现了栈和队列,HashMap和TreeMap类实现了哈希表和树等。
这些集合类提供了丰富的方法和功能,可以方便地进行数据操作和管理。
在实际的软件开发中,选择合适的数据结构对程序的性能和效率至关重要。
不同的数据结构适用于不同的场景,需要根据具体的需求和问题选择合适的数据结构。
同时,对数据结构的深入理解和熟练掌握也是提高编程能力的关键。
总的来说,Java语言提供了丰富的数据结构实现方式,通过选择合适的数据结构可以提高程序的性能和效率。
因此,在学习和使用Java语言时,需要深入理解数据结构的概念和原理,灵活运用各种数据结构来解决实际的问题。
希望通过对数据结构的学习和掌握,能够写出高效、优雅的Java程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二典型数据结构实现与操作一、实验目的1、设计、实现并测试一系列Java引用类型;2、训练学习者面向对象高级特性的应用能力,包括类的继承、方法重写、抽象类与接口应用、程序流程控制;二、实验内容1、Performer接口,描述一切具有“自我表现”能力的事物,其中至少应提供一个show()方法用于显示当前事物的相关说明信息。
2、Person类,实现Performer接口,描述人员信息及相关操作,包括但不限于人员姓名、年龄等。
3、Book类,实现Performer接口,描述图书信息及相关操作,包括但不限于书号、书名、价格等。
4、抽象类Node,实现Performer接口,描述通用数据节点,其中应封装一整型的数据值value及相关操作功能。
5、LinkedListNode类,继承抽象类Node,描述单向链表节点,在Node数据结构基础上添加一个next属性,以指向其后继节点。
6、TreeNode类,继承抽象类Node,描述二叉树节点,在Node数据结构基础上添加lchild及rchild属性,分别用于引用其“左孩子”、“右孩子”节点。
三、实验要求1、实验前书写实验预习报告;2、掌握继承、多态、方法重写3、掌握抽象类、接口4、了解关键字super、static5、学会流程控制6、了解数据结构(链表、二叉树)及相关算法7、写出实验报告四、实验学时8学时五、实验步骤1、进入MyEclipse环境,新建一个Java Project;2、编写实验内容中提到的类;3、编写TestPerformer类,测试应用程序类,在该类中定义一个测试方法introduce(Performer p),并分别创建和使用Person、Book、LinkedListNode 及TreeNode类型对象为实参调用introduce()方法,以验证Java接口与其实现类之间的多态性。
类似地,还可以再定义一个测试方法getInfo(Node n),并分别使用LinkedListNode及TreeNode类型对象为实参调用,以验证Java父类与子类之间的多态性机制。
;4、编写LinkedListTool类,单向链表工具类,在该类中提供一系列static 方法,实现单向链表的常规操作功能,包括但不限于:构造一个测试用新链表、遍历链表、向链表尾部追加节点、删除链表中符合特定条件的节点(例如删除链表中value属性为某一特定值的所有节点)、链表排序、向有序链表中插入一个新节点(仍保持其有序)、有序链表合并(结果仍为有序链表),并对上述方法进行测试。
5、调试运行程序。
六.实验流程图P e r m o r f e rB O O K NODEPERSONTreeNodeLinkedListNode七。
实验代码1.personimport com.ambow.Performer;public class Person implements Performer{ private String name;private int age;public Person(String name,int age){ super();=name;this.age=age;}public String getName(){return name;}public void setName(String name){=name;}public int getAge(){return age;}public void setAge(int age){this.age=age;}public void show(){System.out.println("个人信息,姓名:"+name+",年龄:"+age);}}2.bookimport com.ambow.Performer;public class Book implements Performer{private String id;private String name;private double price;public Book(String id,String name,double price){super();this.id=id;=name;this.price=price;}public String getId(){return id;}public void setId(String id){this.id=id;}public String getName(){return name;}public void setName(String name){=name;}public double getPrice(){return price;}public void setPrice(double price){this.price=price;}public void show(){System.out.println("图书简介,书号:"+id+",书名:"+name+",价格:"+ price);}}3.Nodeimport com.ambow.Performer;public abstract class Node implements Performer{private int value;public Node(){}public Node(int value){this.value=value;}public int getValue(){return value;}public void setValue(int value){this.value=value;}}4.LinkedListNodepublic class LinkedListNode extends Node{private LinkedListNode next;public LinkedListNode(){super();}public LinkedListNode(int value){super(value);}public LinkedListNode(LinkedListNode next){super();this.next=next;}public LinkedListNode(int value,LinkedListNode next){ super(value);this.next=next;}public LinkedListNode getNext(){return next;}public void setNext(LinkedListNode next){this.next=next;}public void show(){System.out.println("单向链表节点,value="+this.getValue());}}5.TreeNodepublic class TreeNode extends Node{private TreeNode lchild;private TreeNode rchild;public TreeNode(){super();}public TreeNode(TreeNode lchild,TreeNode rchild){super();this.lchild=lchild;this.rchild=rchild;}public TreeNode(int value,TreeNode lchild,TreeNode rchild){ super(value);this.lchild=lchild;this.rchild=rchild;}public TreeNode getLchild(){return lchild;}public void setLchild(TreeNode lchild){this.lchild=lchild;}public TreeNode getRchild(){return rchild;}public void setRchild(TreeNode rchild){this.rchild=rchild;}public void show(){System.out.println("二叉树节点,value="+this.getValue());}}6.TestPerformerimport com.ambow.Performer;public class TestPerformer{public static void main(String[]args){TestPerformer tp=new TestPerformer();tp.introduce(new Person("张三",18));tp.introduce(new Book("ISBN1001","Java核心技术",38.50));tp.introduce(new LinkedListNode(20,null));tp.introduce(new TreeNode(33,null,null));}public void introduce(Performer p){p.show();}}7.LinkedListToolpublic class LinkedListTool{public static void main(String[]args){//创建一个单向链表LinkedListNode head=LinkedListTool.createLinkedList();//遍历它LinkedListTool.show(head);//尾部追加节点LinkedListNode result;result=LinkedListTool.append(head,new LinkedListNode(99,null));LinkedListTool.show(result);head=result;//删除其中符合特定条件的节点result=LinkedListTool.delete(head,23);LinkedListTool.show(result);head=result;//排序result=LinkedListTool.sort(head);LinkedListTool.show(result);head=result;//向有序链表中插入一个新节点result=LinkedListTool.insert(head,new LinkedListNode(88,null));LinkedListTool.show(result);head=result;//合并两个有序链表LinkedListNode h2=LinkedListTool.createLinkedList();result=LinkedListTool.merge(head,h2);LinkedListTool.show(result);}public static LinkedListNode createLinkedList(){int[]a={44,23,45,23,78,33,121,34,322,-76};int size=a.length;LinkedListNode head=new LinkedListNode(a[size-1]);for(int i=size-2;i>=0;i--){head=new LinkedListNode(a[i],head);}return head;}public static void show(LinkedListNode head){while(head!=null){System.out.print(head.getValue());head=head.getNext();if(head!=null){System.out.print("->");}}System.out.println("\n---------------------------");}public static LinkedListNode append(LinkedListNode head,LinkedListNode new_p){if(head==null){head=new_p;}else{//p指向当前头节点(非空的)LinkedListNode p=head;//n为p的后继节点(可能为空值)LinkedListNode n=p.getNext();while(n!=null){p=n;n=p.getNext();}p.setNext(new_p);}return head;}public static LinkedListNode delete(LinkedListNode head,int v){//删除链表开头的连续多个节点while(head!=null&&head.getValue()==v){head=head.getNext();}//head要保留if(head!=null){//删除符合条件中间节点//p指向当前头节点(非空的)LinkedListNode p=head;//n为p的后继节点(可能为空值)LinkedListNode n=p.getNext();while(n!=null){if(n.getValue()==v){//该删除p.setNext(n.getNext());}else{p=n;}n=p.getNext();}}return head;}public static LinkedListNode sort(LinkedListNode head){//创建一个空的结果链表LinkedListNode nhead=null;//依次取出源链表中的每一个节点,并将之插入到有序的结构链表中,仍然结构链表的有序状态while(head!=null){LinkedListNode c=head;head=head.getNext();c.setNext(null);//将c这个节点插入到有序的链表nhead中nhead=LinkedListTool.insert(nhead,c);}return nhead;}//向有序链表中插入一个新节点,并保持其有序状态public static LinkedListNode insert(LinkedListNode head,LinkedListNode n){ //如果目标链表为空链表if(head==null){head=n;}else if(n.getValue()<head.getValue()){n.setNext(head);head=n;}else{LinkedListNode p1=head;LinkedListNode p2=head.getNext();while(p2!=null&&n.getValue()>p2.getValue()){p1=p2;p2=p2.getNext();}//将n节点插入到p1和p2两个节点之间p1.setNext(n);n.setNext(p2);}return head;}public static LinkedListNode merge(LinkedListNode head1,LinkedListNode head2){head2=LinkedListTool.sort(head2);//依次取出head1链表中的每一个节点,并将之插入到有序的head2链表中,仍然结构链表的有序状态while(head1!=null){LinkedListNode c=head1;head1=head1.getNext();c.setNext(null);//将c这个节点插入到有序的链表nhead中head2=LinkedListTool.insert(head2,c);}return head2;}}8.TreeToolublic class TreeTool{public static void main(String[]args){TreeNode root=TreeTool.createLinkedList();TreeTool.list(root);}//构建一颗二叉树public static TreeNode createLinkedList(){TreeNode n1=new TreeNode(9,null,null);TreeNode n2=new TreeNode(12,null,null);TreeNode n3=new TreeNode(49,n1,n2);TreeNode n4=new TreeNode(54,null,null);TreeNode n5=new TreeNode(37,n3,n4);return n5;}//遍历二叉树(中序遍历)public static void list(TreeNode root){if(root!=null){list(root.getLchild());System.out.println(root.getValue());list(root.getRchild());}}//遍历二叉树(前序遍历)public static void list2(TreeNode root){if(root!=null){System.out.println(root.getValue());list2(root.getLchild());list2(root.getRchild());}}//遍历二叉树(后序遍历)public static void list3(TreeNode root){if(root!=null){list3(root.getLchild());list3(root.getRchild());System.out.println(root.getValue());}}}八.实验效果图1.输入年份2.万年历的实现九.结果分析:以上程序运行结果不对,缺少符号等,存在的问题及解决方法:由于在MyEclipse中打代码,很多细节容易忽视,因此在M y E c l i p s e中打完代码,还需运行一次,避免错误的出现。