Java数据结构与算法5——链表

1.什么是链表

链表也是一种特殊的线性表,它由一系列结点组成,结点的顺序是通过结点元素中的指针链接次序来确定的。链表中的结点包含两个部分,一个是它自身需存放的数据,另一个是指向下一个结点的引用。

链表和数组:

  • 1)都可作为数据的存储结构
  • 2)数组:固定长度、顺序存放
  • 3)链表:没有容量限制,非连续和非顺序的存储数据
  • 4)从效率上说,链表基本上完胜数组,这个在后面讲述每种链表的时候再分析
  • 5)基本上,能用数组的地方,都可以使用链表来代替数组。链表的缺点是引入了复杂度。

2.链表的基本操作

1)向链表中插入数据
2)从链表中移走数据
3)查看链表中所有的数据
4)查找指定链结点
5)删除指定链结点

3.单链表的实现

SingleLinkList.java
单链表的效率在表头插入和删除非常快,基本就是修改一下引用值,时间大约为常量,即为O(1)。

查找、删除等功能,大约需要O(N)次比较,跟数组差不多,但仍然比数组快,因为它不需要移动或复制数据

4.双端链表及其实现

双端链表所谓双端链表是,不仅仅记录着开始结点,同时也记录着结束结点。注意,不要把双端和双向搞混了。

5.使用链表来实现栈和队列

6.有序链表及其实现

有序链表就是链表中的数据是排好顺序的。

有序链表的效率插入和删除,大约需要O(N)次比较。

7.使用有序链表来实现插入排序

使用有序链表来实现插入排序思路:把数据依次插入到有序链表,然后再依次读取出来,这就已经排好序了。

效率:比数组插入法更高,因为这种方式下,数据的复制次数要少一些,每个节点只需要2*N次复制,而数组中需要N的平方次复制。

8.双向链表及其实现

双向链表就是链表中的每个节点,同时记录着前驱结点和后继节点,这样就既能向后遍历数据,也可以向前遍历数据了。

参考

  • 1)Java数据结构和算法精讲版

你可能感兴趣的:(Java数据结构与算法5——链表)