`
xyzroundo
  • 浏览: 508976 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类
最新评论

java 链表 实现

阅读更多
(1)简单链表
Java代码 
1. package ChapterFive;  
2.  
3. class Link<E> {  
4.  
5.     public E data;  
6.  
7.     public Link<E> next;  
8.  
9.     public Link(E data) {  
10.         this.data = data;  
11.     }  
12. }  
13.  
14. class LinkList<E> {  
15.  
16.     public Link<E> first;  
17.     //链表中数据项的个数  
18.     public int size;  
19.  
20.     public LinkList() {  
21.         first = null;  
22.         size = 0;  
23.     }  
24.     //在表头插入新的数据  
25.     public void insertFirst(E value) {  
26.         Link<E> link = new Link<E>(value);  
27.         link.next = first;  
28.         first = link;  
29.         size++;  
30.     }  
31.     //判断链表是否为空  
32.     public boolean isEmpty() {  
33.         return size == 0;  
34.     }  
35.     //删除表头  
36.     public Link<E> deleteFirst() {  
37.         Link<E> temp = first;  
38.         first = first.next;  
39.         size--;  
40.         return temp;  
41.     }  
42.     //输出链表中的所有数据  
43.     public void display() {  
44.         Link<E> curr = first;  
45.         while (curr != null) {  
46.             System.out.print(curr.data + " ");  
47.             curr = curr.next;  
48.         }  
49.         System.out.println();  
50.     }  
51.     //返回链表中数据项的个数  
52.     public int size() {  
53.         return size;  
54.     }  
55.     //获取从头至尾的第i个数据项  
56.     public Link<E> get(int i) {  
57.         if (i > size() - 1 || i < 0)  
58.             try {  
59.                 throw new IndexOutOfBoundsException();  
60.             } catch (Exception e) {  
61.                 e.printStackTrace();  
62.             }  
63.         Link<E> curr = first;  
64.         for (int n = 0; n < size(); n++) {  
65.             if (n == i)  
66.                 return curr;  
67.             else 
68.                 curr = curr.next;  
69.         }  
70.         return null;  
71.     }  
72.     //输出从头至尾的第i个数据项  
73.     public void remove(int i) {  
74.         if (i == 0)  
75.             deleteFirst();  
76.         else if (i == size() - 1)  
77.             get(i - 1).next = null;  
78.         else {  
79.             get(i - 1).next = get(i + 1);  
80.         }  
81.         size--;  
82.     }  
83. }  
84.  
85. public class Link_list {  
86.     public static void main(String[] args) {  
87.         LinkList<Long> ll = new LinkList<Long>();  
88.         for (int i = 0; i < 10; i++) {  
89.             Long value = (long) (Math.random() * 100);  
90.             ll.insertFirst(value);  
91.         }  
92.         ll.display();  
93.         while (!ll.isEmpty()) {  
94.             ll.deleteFirst();  
95.             ll.display();  
96.         }  
97.         System.out.println("Ok");  
98.     }  
99. } 

(2)链栈
Java代码 
1. package ChapterFive;  
2.  
3. class LinkStack<E> {  
4.  
5.     LinkList<E> linkList;  
6.  
7.     int size;  
8.  
9.     public LinkStack() {  
10.         size = 0;  
11.         linkList = new LinkList<E>();  
12.     }  
13.     //入栈  
14.     public void push(E value) {  
15.         linkList.insertFirst(value);  
16.         size++;  
17.     }  
18.     //出栈  
19.     public Link<E> pop() {  
20.         size--;  
21.         return linkList.deleteFirst();  
22.     }  
23.     //返回栈顶元素  
24.     public Link<E> top() {  
25.         return linkList.first;  
26.     }  
27.     //判断栈是否为空  
28.     public boolean isEmpty() {  
29.         return size == 0;  
30.     }  
31.     //显示栈中的全部数据  
32.     public void display() {  
33.         linkList.display();  
34.     }  
35. }  
36.  
37. public class Link_stack {  
38.     public static void main(String[] args) {  
39.         LinkStack<Long> ls = new LinkStack<Long>();  
40.         for (int i = 0; i < 10; i++) {  
41.             Long value = new Long((long) (Math.random() * 100));  
42.             ls.push(value);  
43.         }  
44.         while (!ls.isEmpty()) {  
45.             ls.pop();  
46.             ls.display();  
47.         }  
48.         System.out.println("Ok");  
49.     }  
50. } 

(3)有序表
Java代码 
1. package ChapterFive;  
2.  
3. class SortedLink {  
4.  
5.     public Link<Long> first;  
6.  
7.     int size;  
8.  
9.     public SortedLink() {  
10.         first = null;  
11.         size = 0;  
12.     }  
13.     //向有序链表中插入数据  
14.     public void insert(long value) {  
15.         Link<Long> newLink = new Link<Long>(value);  
16.         Link<Long> previous = null;  
17.         Link<Long> curr = first;  
18.         while (curr != null && (value > curr.data)) {  
19.             previous = curr;  
20.             curr = curr.next;  
21.         }  
22.         if (previous == null)// 链表为空(在表头插入)  
23.             first = newLink;  
24.         else 
25.             previous.next = newLink;//插入新的节点  
26.         newLink.next = curr;  
27.         size++;  
28.     }  
29.     //删除第一个节点  
30.     public Link<Long> remove() {  
31.         Link<Long> temp = first;  
32.         first = first.next;  
33.         size--;  
34.         return temp;  
35.     }  
36.     //判断链表是否为空  
37.     public boolean isEmpty() {  
38.         return size == 0;  
39.     }  
40.     //输出链表的所有数据  
41.     public void display() {  
42.         Link<Long> curr = first;  
43.         while (curr != null) {  
44.             System.out.print(curr.data + " ");  
45.             curr = curr.next;  
46.         }  
47.         System.out.println();  
48.     }  
49. }  
50.  
51. public class SortedLinkApp {  
52.     public static void main(String[] args) {  
53.         SortedLink sl = new SortedLink();  
54.         for (int i = 0; i < 10; i++) {  
55.             sl.insert((long) (Math.random() * 100));  
56.         }  
57.         while (!sl.isEmpty()) {  
58.             sl.remove();  
59.             sl.display();  
60.         }  
61.     }  
62. } 

(4)双向链表
Java代码 
1. package ChapterFive;  
2.  
3. class DoubleLink<E> {  
4.  
5.     public Link<E> first;  
6.  
7.     public Link<E> last;  
8.  
9.     int size;  
10.  
11.     @SuppressWarnings("hiding")  
12.     class Link<E> {  
13.         public E data;  
14.  
15.         public Link<E> next;// 链表的下一项  
16.  
17.         public Link<E> previous;// 链表的前一项  
18.  
19.         public Link(E value) {  
20.             this.data = value;  
21.         }  
22.     }  
23.  
24.     public DoubleLink() {  
25.         first = null;  
26.         last = null;  
27.         size = 0;  
28.     }  
29.  
30.     // 在链表的首部插入一项  
31.     public void insertFirst(E value) {  
32.         Link<E> newLink = new Link<E>(value);  
33.         if (isEmpty())// 如果链表为空则first == last  
34.             last = newLink;  
35.         else 
36.             first.previous = newLink;// 确定原first与newLink的前后关系  
37.         newLink.next = first;  
38.         first = newLink;// 设置新的first值  
39.         size++;  
40.     }  
41.  
42.     // 在链表的尾部插入一项  
43.     public void insertLast(E value) {  
44.         Link<E> newLink = new Link<E>(value);  
45.         if (isEmpty())// 如果链表为空则last == first  
46.             first = newLink;  
47.         else {  
48.             last.next = newLink;// 确定原last与newLink的前后关系  
49.             newLink.previous = last;  
50.         }  
51.         last = newLink;// 设置新的last值  
52.         size++;  
53.     }  
54.  
55.     // 删除双向链表的表头  
56.     public Link<E> deleteFirst() {  
57.         Link<E> temp = first;  
58.         if (first.next == null)// 链表中只有一项数据  
59.             last = null;  
60.         else 
61.             first.next.previous = null;// 销毁原链表的头部  
62.         first = first.next;  
63.         size--;  
64.         return temp;  
65.     }  
66.  
67.     // 删除链表的最后一项  
68.     public Link<E> deleteLast() {  
69.         Link<E> temp = last;  
70.         if (first.next == null)// 链表中只有一项数据  
71.             first = null;  
72.         else 
73.             last.previous.next = null;// 销毁原链表的尾部  
74.         last = last.previous;  
75.         size--;  
76.         return temp;  
77.     }  
78.  
79.     // 判断链表是否为空  
80.     public boolean isEmpty() {  
81.         return size == 0;  
82.     }  
83.  
84.     // 输出链表中的所有数据项  
85.     public void display() {  
86.         Link<E> curr = first;  
87.         while (curr != null) {  
88.             System.out.print(curr.data + " ");  
89.             curr = curr.next;  
90.         }  
91.         System.out.println();  
92.     }  
93. }  
94.  
95. public class DoubleLinkApp {  
96.     public static void main(String[] args) {  
97.         DoubleLink<Integer> dl = new DoubleLink<Integer>();  
98.         for (int i = 0; i < 5; i++) {  
99.             dl.insertFirst((int) (Math.random() * 100));  
100.         }  
101.         for (int i = 0; i < 5; i++) {  
102.             dl.insertLast((int) (Math.random() * 100));  
103.         }  
104.         dl.display();  
105.         while (!dl.isEmpty()) {  
106.             dl.deleteFirst();  
107.             dl.deleteLast();  
108.             dl.display();  
109.         }  
110.         System.out.println("Ok");  
111.     }  
112. } 
分享到:
评论
1 楼 生死格斗 2010-03-26  
楼主你测试通过了吗?
第一个实现链表那个有问题吧

相关推荐

    JAVA链表实现类(数据结构学习)

    JAVA链表实现类(数据结构学习).chm

    多项式相加 java链表实现

    总结来说,用Java链表实现多项式相加和相乘,主要步骤包括: 1. 创建`Node`类,表示多项式项。 2. 创建`LinkedList`类,表示多项式链表,并实现链表的基本操作。 3. 实现`insertA`方法,将一个多项式插入到另一个...

    java链表实现约瑟夫问题

    约瑟夫问题,通过类实现的链表,并加以改进,做成双向链表

    基于Java链表实现的字典树(trie)

    基于Java链表实现的字典树(trie),实现了增删改查等功能,它说摘要必须大于50字我还能说啥啥啥啥

    Java链表实现三例绝对经典.doc

    Java链表实现三例绝对经典,这主要涵盖了链表数据结构的基本操作,包括创建链表、遍历链表、添加节点以及删除节点。下面将详细解释这三个经典示例中的核心概念和技术。 首先,链表是一种线性数据结构,与数组不同,...

    java链表实现

    在Java编程语言中,链表是一种重要的数据...以上就是关于Java语言中单链表实现的知识点,涵盖了链表的基本概念、类结构、操作方法以及实际应用。理解这些概念有助于更好地设计和优化程序,特别是在处理动态数据集时。

    java链表实现丢手绢游戏

    下面将详细阐述如何用Java实现链表以及丢手绢游戏。 首先,我们需要创建一个`Player`类来表示游戏中的玩家。这个类至少包含两个属性:玩家的名字和指向下一个玩家的引用。例如: ```java public class Player { ...

    java链表实现的例子

    链表

    java入门程序(模拟图书馆管理)

    本项目“java入门程序(模拟图书馆管理)”是针对初学者设计的一个简单的学习资源,它通过使用链表这种数据结构来实现对图书馆书籍的管理功能,帮助初学者理解Java编程以及链表的基本概念。 链表是一种线性数据结构...

    java链表 个人总结

    Java链表是编程中一种基础且重要的数据结构,它在许多场景下有着广泛的应用。本文将结合个人学习心得,深入探讨Java链表的核心概念、实现方式以及与其他编程语言的互通性。 首先,链表是一种线性数据结构,与数组...

    java实现链表操作

    用java实现了数据结构中的链表,作为新手学习数据结构和java的资料。

    多项式相加 java 链表

    总结来说,使用Java链表实现多项式相加是一种直观且有效的方法。通过链表的特性,我们可以方便地管理多项式的各项,并进行相应的计算。这个过程不仅锻炼了数据结构和算法的应用能力,也提高了代码的可读性和可维护性...

    用链表实现线性表java

    链表实现线性表的基本操作包括添加元素(插入)、删除元素、查找元素以及遍历等。在`ChainList.java`文件中,可能会定义一个名为`Node`的类来表示链表节点,如下所示: ```java class Node { int data; Node next...

    一元多项式相加 java实现

    总结起来,这个课程设计项目旨在让你理解和掌握链表数据结构的应用,以及如何利用链表实现一元多项式的表示和操作。通过解决这个问题,你不仅能提升编程技能,还能加深对基础数学和算法的理解。

    Java链表

    #### 二、Java链表实现机制 Java中链表的实现并不依赖于传统意义上的指针,而是通过对象引用。这是因为Java语言设计上不直接支持指针,但对象引用实质上扮演了指针的角色,使得链表在Java中依然可以轻松构建和管理...

    java版链表实现定时器功能

    在Java中,`java.util.Timer`类和`java.util.TimerTask`类提供了这样的功能,但它们是基于线程的,而非链表实现。然而,如果我们想用链表来实现定时器,我们可以模拟这个过程,创建一个节点代表每个待执行的任务,...

    java编写的循环链表来实现约瑟夫环

    循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释

    java链表的程序

    Java链表是一种基础且重要的数据结构,主要用于存储和管理动态数据集合。在Java中,有多种类型的链表,包括单链表、双链表和循环链表等。本程序可能是针对这些链表类型的一种实现,用于Java考试复习。在Java中,`...

    JAVA 链表实验源代码

    这里我们关注的是两个源代码文件——`ListNode.java`和`StringLinkedList.java`,它们是关于链表实现的Java源代码实验。 首先,`ListNode.java`通常会包含链表节点的定义。链表节点是链表的基本组成单元,它存储...

    Java用链表实现的计算器程序.rar_JAVA计算器链表_计算器链表

    这个"Java用链表实现的计算器程序"很可能是设计为一个解析表达式并进行计算的系统。链表在这里的角色可能是用来表示数学表达式的结构。例如,每个节点可能包含一个运算符(如加、减、乘、除)或者一个数字,通过这种...

Global site tag (gtag.js) - Google Analytics