Java数据结构与算法_链表
数组作为数据存储结构有一定的缺陷,在无序的数组中,搜索是低效的;而在有序数组中,插入效率又很低;不管在哪一种数组中删除效率都很低。况且一个数组创建后,它的大小不能改变,链表就能够解决数组插入、删除效率低问题。
链表在表头插入和删除速度很快。仅需要改变一两个引用值,所以花费O(1)的时间。平均起来,查找、删除和指定节点后面插入都需要搜索链表中一般链接点,需要O(N)次比较。在数组中执行这些操作也需要O(N)次比较,但是链表任然要快一些,因为要插入和删除链接点时,链表不需要移动任何东西。
链表是继数组后第二中使用得最广泛的通用存储结构。
下面的使用Java代码实现双向链表:
1:链表Interface
public interface ListX<E> { public int size(); // 表数据总数 public boolean isEmpty(); // 是否为空 /** * Appends the specified element to the end of this list * @param e Element will be appends to the list * @return */ boolean add(E e); /** * Insert the element at the specified position in the list with specified element * @param index * @param element */ void add(int index, E element); /** * Remove the element at the specified position in this list * @param index * @return */ E remove(int index); /** * Removes the first element from the list * @param o * @return */ boolean removeFirst(); /** * Return the element at the specified position of list * @param index * @return */ E get(int index); /** * Return the element at the first position of list * @param index * @return */ E getFirst(); /** * Return the element at the last position of list * @return */ E getLast(); boolean contains(E e); }
2:结点类Entry
Entry是放在LinkedListX中的内部静态类
/** * 节点类, 代表链表中的每一个节点。 * @author xusy * * @param <E> */ private static class Entry<E> { E element; Entry next; Entry previous; public Entry(E e, Entry<E> previous, Entry<E> next) { this.element = e; this.next = next; this.previous = previous; } }
3:链表LinkedListX
import java.util.NoSuchElementException; public class LinkedListX<E> implements ListX<E> { private int size; private Entry header = new Entry<E>(null, null, null); public LinkedListX() { header.next = header.previous = header; } /** * 节点类, 代表链表中的每一个节点。 * @author xusy * * @param <E> */ private static class Entry<E> { E element; Entry next; Entry previous; public Entry(E e, Entry<E> previous, Entry<E> next) { this.element = e; this.next = next; this.previous = previous; } } public E getFirst() { if (size == 0) throw new NoSuchElementException(); return (E) header.next.element; } public E getLast() { if (size == 0) throw new NoSuchElementException(); return (E) header.previous.element; } public void addFirst(E element) { addBefore(element, header.next); } public void addLast(E element) { addBefore(element, header); } public boolean contains(E e) { int index = indexOf(e); return index != -1; } public E remove(Entry e) { e.previous.next = e.next; e.next.previous = e.previous; E element = (E) e.element; e.next = null; e.previous = null; e.element = null; size--; return element; } private int indexOf(E o) { int index = 0; if (o == null) { for (Entry e = header.next; e != header; e = e.next) { if (e.element == null) return index; index++; } } else { for (Entry e = header.next; e != header; e = e.next) { if (o.equals(e.element)) return index; index++; } } return -1; } private void addBefore(E element, Entry entry) { Entry newEntry = new Entry<E>(element, entry.previous, entry); newEntry.next.previous = newEntry; newEntry.previous.next = newEntry; size++; } @Override public int size() { return size; } @Override public boolean isEmpty() { return size == 0; } @Override public boolean add(E e) { addLast(e); return true; } @Override public void add(int index, E element) { Entry entry = index(index); addBefore(element, entry); } private Entry index(int index) { if (index < 0 || index > size) throw new IndexOutOfBoundsException(); Entry entry = header.next; while (index > 0) { entry = entry.next; } return entry; } @Override public E remove(int index) { Entry entry = index(index); return remove(entry); } @Override public boolean removeFirst() { if (size == 0) throw new NoSuchElementException(); remove(header.next); return true; } @Override public E get(int index) { return (E) index(index).element; } public void insertSort(int[] array){ int in,out,temp; for(out=1;out<array.length;out++){ temp = array[out]; in=out; while(in>0&&array[in]>temp){ array[in]=array[in-1]; in--; } array[in]=temp; } } }
相关推荐
Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点进行详细解释。 1. **数据结构**: - **稀疏数组**:当大量数据中大部分为零或...
《Java数据结构和算法中文第二版》是一本深入探讨Java编程中数据结构和算法的书籍。数据结构是计算机科学的基础,它涉及到如何有效地组织和存储数据,以便在各种操作下高效地访问和修改。算法则是解决问题的具体步骤...
资源摘要信息是关于Java数据结构和算法的知识点总结,涵盖了数组、栈与队列、链表、递归、哈希表、高级排序、二叉树、红黑树、堆、带权图等数据结构和算法概念。 一、数组 * 数组是相同类型变量的集合,可以使用...
数据结构与算法是计算机科学的基础,对于理解和编写高效软件至关重要。C、C++和Java都是广泛使用的编程语言,它们在处理数据结构和算法时各有特点。以下是对这三种语言在数据结构与算法方面的一些关键知识点的详细...
学习者会学习如何在实际编程环境中(可能是C++、Java、Python等语言)实现这些数据结构和算法,通过编写和调试代码来增强编程技能。 4. **课件与演示**:课程资源中的课件PDF和演示可能包含了理论讲解、实例分析、...
《数据结构与算法_JAVA语言描述》是一本深入探讨数据结构和算法的书籍,主要针对使用Java编程语言的读者。本书旨在帮助读者理解和掌握如何在实际编程中有效地使用各种数据结构和算法,以提高程序的效率和性能。下面...
根据提供的信息,“Java数据结构和算法中文第二版”这本书主要关注的是数据结构与算法的相关内容。下面将基于这些信息,详细介绍数据结构与算法的核心概念、重要性和应用领域,以及在Java编程环境中如何实现这些概念...
数据结构1.pptx 2X1{SH5V_HSM`5JS[H]Z`JP.png 33XTI0U)]QTVK1MINJY0)F3.png 34MMEH64LMCA}H5G_RXKPGO.png 65]YTLJ{NP7ICB9{]%XK5J2.png 73I2ZJ(3Z5XWL3W1LFVZRCR.png MQJ[~8HPO2L{35`{CY8{WXO.png P)(%S5}WL7HD(09E1...
数据结构与算法是计算机科学的基础,对于理解和设计高效的软件至关重要。在Java编程中,掌握数据结构和算法能够帮助开发者编写出性能优越、可维护性高的代码。以下将详细阐述相关知识点。 1. **数据结构**: 数据...
这份“Java数据结构与算法+源代码高清版”资源旨在帮助开发者深入理解并掌握这些关键概念。 首先,让我们来探讨数据结构。数据结构是组织和存储数据的方式,它为算法提供了基础。常见的数据结构包括数组、链表、栈...
Java数据结构和算法是计算机科学中的核心概念,对于任何Java开发者来说,理解和掌握它们都是至关重要的。本资源包“Java数据结构和算法(第二版)+源代码+Applets”为学习者提供了一个全面且深入的学习平台,涵盖了...
本资源"数据结构与算法代码详解JAVA版"聚焦于使用Java语言来理解和实现这些核心概念。 首先,数据结构是组织和存储数据的方式,它为高效地执行各种操作提供了便利。常见的数据结构包括数组、链表、栈、队列、树(如...
《Java数据结构和算法-带书签目录扫描版》是一本深入探讨Java编程语言中数据结构和算法的书籍。此扫描版特别包含了完整的书签目录,使得读者在电子版阅读时能够快速定位到所需章节,提高了学习和查阅的效率。 在...
《Java数据结构和算法》(第2版)介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和...
数据结构与算法分析是计算机...通过阅读《数据结构与算法分析Java3rd英文》这本书,你可以深入理解这些概念,并学习如何在Java中有效地应用它们。这本书会涵盖各种示例和练习,帮助读者巩固理论知识并提高实践技能。
本书“数据结构与算法分析_Java语言及示例”提供了详细且直观的解释,通过Java语言来阐述这些概念,使得学习过程更为易懂。 首先,我们要了解数据结构。数据结构是组织和存储数据的方式,它决定了我们如何在计算机...
《Java数据结构和算法(第二版)》是一本专为希望深入理解Java编程中的数据结构与算法的读者设计的书籍。这本书的特点是从基础知识逐步引导读者进入复杂领域,通过结合实际的Applet小程序,使得理论知识变得生动直观。...
java 数据结构和算法, 排序算法, 数组,链表,二叉树
Java 数据结构与算法是计算机科学的核心部分,它们是编写高效、优化代码的基础。在这个视频教程中,我们将深入探讨这些关键概念,以便提升你的编程技能。数据结构是存储和组织数据的方式,而算法则是解决问题或执行...