近日复习数据结构,以前都是用c写的程序,现在用java来将其重新实现,希望大家批评指正:
1,节点说明:
package pku.ss.datastructure.LinkedList;
public class ListNode {
ListNode(Object theElement) {
this(theElement, null);
}
ListNode(Object theElement, ListNode n) {
element = theElement;
next = n;
}
Object element; //节点中的元素
ListNode next; //指向下一个节点
}
2,枚举器类
package pku.ss.datastructure.LinkedList;
/**
* 是一个枚举器(iterator)类,它提供了用于读取元素的方法 LinkedListItr存储
* 对ListNode对象的一个引用,它代表枚举器 的位置
*
* @author Jacken
*/
public class LinkedListItr {
LinkedListItr(ListNode theNode) {
current = theNode;
}
/**
* 判断当前节点是否是最后一个节点
* @return true or false
*/
public boolean isPastEnd() {
return current == null;
}
/**
* 返回当前节点的元素值
* @return 当前节点的元素值
*/
public Object retrieve() {
return isPastEnd() ? null : current.element;
}
/**
* 将当前节点往后推后一个节点
*/
public void advance() {
if (!isPastEnd())
current = current.next;
}
ListNode current;
}
3,链表类
package pku.ss.datastructure.LinkedList;
public class LinkedList {
public LinkedList() {
header = new ListNode(null);
}
/**
* 判断链表是否为空
* @return true or false
*/
public boolean isEmpty() {
return header.next == null;
}
/**
* 将链表置空
*/
public void makeEmpty() {
header.next = null;
}
/**
* 返回头节点的枚举器
* @return 头节点枚举器
*/
public LinkedListItr zeroth() {
return new LinkedListItr(header);
}
/**
* 返回第一个节点的枚举器
* @return 第一个节点的枚举器
*/
public LinkedListItr first() {
return new LinkedListItr(header.next);
}
/**
* 查找指定元素
* @param x
* @return 所查找元素的枚举器
*/
public LinkedListItr find(Object x) {
ListNode itr = header.next;
while (itr.next != null && !itr.element.equals(x))
itr = itr.next;
return new LinkedListItr(itr);
}
/**
* 删除指定元素
* @param x
*/
public void remove(Object x) {
LinkedListItr p = findPrevious(x);
if (p.current.next != null)
p.current.next = p.current.next.next;
}
/**
* 查找指定元素的头一个节点
* @param x
* @return 指定元素的头一个节点的枚举器
*/
public LinkedListItr findPrevious(Object x) {
ListNode itr = header;
while (itr.next != null && !itr.next.element.equals(x))
itr = itr.next;
return new LinkedListItr(itr);
}
/**
* 在P几点后面插入一个节点,节点的元素值为x
* @param x
* @param p
*/
public void insert(Object x, LinkedListItr p) {
if (p != null && p.current != null)
p.current.next = new ListNode(x, p.current.next);
}
/**
* 打印指定链表
* @param theList
*/
public static void printList(LinkedList theList) {
if (theList.isEmpty()) {
System.out.println("Empty List");
} else {
LinkedListItr itr = theList.first();
for (; !itr.isPastEnd(); itr.advance())
System.out.println(itr.retrieve() + " ");
}
}
private ListNode header;
}
分享到:
相关推荐
总结一下,本主题涵盖了Java中的链表数据结构,包括`LinkedList`和`ArrayList`的实现,以及如何通过`Interface`和`Iterator`进行操作。理解这些概念对于编写高效的Java代码至关重要。通过实践和学习,你可以更好地...
Java数据结构 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构
"Java数据结构之链表、栈、队列、树的实现方法示例" 在计算机科学中,数据结构是一种组织和存储数据的方式,以便实现高效的数据存取和处理。Java数据结构中常用的数据结构有链表、栈、队列、树等,本文将详细介绍...
本篇文章将深入讲解Java中链表数据结构的遍历程序,以及如何通过`LinkListFour.java`这个文件来实现链表的遍历。 首先,链表不同于数组,它不连续存储数据,而是通过节点间的引用关系构成。每个节点包含两部分:...
链表是一种基础且重要的数据结构,它在计算机科学和编程,尤其是Java中有着广泛的应用。与数组不同,链表中的元素并不在内存中连续存储,而是通过节点间的引用(或称为指针)来连接。每个节点包含两部分:数据域,...
在这个名为“数据结构JAVA实现”的压缩包中,我们可以看到作者提供了三种重要的数据结构——链表、有序二叉树和队列的Java代码实现。 首先,让我们详细探讨链表。链表是一种线性数据结构,与数组不同,它不连续存储...
《基于Java数据结构链表实现的“猴子选大王”》 在计算机科学中,数据结构是编程的基础,它涉及到如何高效地存储和处理数据。本文将深入探讨一个基于Java数据结构链表实现的经典问题——“猴子选大王”,也称作...
这是个java编的双向链表的演示,数据结构是编程中很重要,但很难懂的一部分
在Java中,我们可以使用类来实现链表的数据结构。 首先,我们来看单链表的一些基本操作: 1. **insertFirst**: 在链表头部插入新节点。这个操作的时间复杂度是O(1),因为只需要改变头节点的引用即可。 ```java ...
数据结构-链表 JAVA语言实现,包含单向链表、双向链表、循环链表的遍历、删除和插入 详细介绍:http://blog.csdn.net/z740852294/article/details/77369439
在编程领域,数据结构是构建高效算法的基础,而链表作为一种基本的数据结构,对于理解和掌握高级编程技巧至关重要。本文将详细探讨如何使用Java语言来实现链表,包括顺序表和单链表、双链表。 首先,我们来看顺序表...
本项目“java模拟实现数组链表树图等数据结构”旨在帮助初学者通过实际操作来理解这些基本数据结构及其工作原理。 首先,数组是最基础的数据结构,它是一个有序的元素集合,元素可以通过索引来访问。在Java中,数组...
数据结构链表是计算机科学中最为基础和重要的数据结构之一,它的灵活多变使得在数据存储、管理和操作上具有更高的效率。本文将基于Java语言来探讨链表相关程序的实现和特点,以及Java内存分配与回收机制对链表实现的...
在Java中,双向链表是一种重要的数据结构,它允许在链表中的元素之间进行前后双向导航。本示例将详细介绍如何在Java中实现一个简单的双向链表,并提供相关的操作方法。 双向链表由一系列节点组成,每个节点包含三个...
《Java数据结构和算法中文第二版》是一本深入探讨Java编程中数据结构和算法的书籍。数据结构是计算机科学的基础,它涉及到如何有效地组织和存储数据,以便在各种操作下高效地访问和修改。算法则是解决问题的具体步骤...
"Java常见数据结构面试题(带答案)" 以下是对Java常见数据结构面试题的...本篇文章主要介绍了Java常见数据结构面试题,涵盖了栈、队列、链表、线性表、树、算法、数据结构等知识点,希望对广大的程序爱好者有所帮助。
其中,循环链表是一种常用的数据结构,它通过链式存储方式形成一个没有头尾之分的闭合结构,非常适合用来模拟这种环形排列的问题。 循环链表由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在Java中,...
在本项目中,“数据结构链表演示(java swing)”利用了Java Swing库来创建一个图形用户界面(GUI),直观地展示链表和堆栈的操作。 Java Swing是Java AWT(Abstract Window Toolkit)的一个扩展,提供了丰富的组件...
本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...