《大话数据结构》笔记(3-2)--线性表的链式存储结构:单链表

单链表的Java实现代码:
 

第三章 线性表

线性表的链式存储结构
 n个结点链结成一个链表,即为线性表(a1a2, ..., an)的链式存储结构,因为链表的每个节点中只包含一个指针域,所以叫做单链表。
 
 
头指针
链表中第一个结点的存储位置叫做头指针,最后一个结点指针为NULL
 
头结点
有时,为了更方便的对链表进行操作,会在单链表的第一个结点前附设一个结点,称为头结点。头结点的数据域可不存储任何信息,也可存储如线性表的长度等附件信息,头结点的指针域指向第一个结点的指针。
 
头指针和头结点的异同
 
线性表链式存储结构代码描述
若线性表为空表,则头结点的指针域为NULL
 
简化的链表表示图如下:
1. 头指针型的单链表
 2. 带有头结点的单链表
 3. 空链表
 C语言中可用结构指针来描述单链表,如下:
 
 
 
单链表的读取:最坏情况的时间复杂度为O(n)
 
其核心思想就是“工作指针后移”。
 
 
单链表的插入与删除
插入:时间复杂度O(n)
1. 插入链表中段
 
 
 2. 插入到表头或表尾
与上同
 算法思路与代码实现:
 
删除:时间复杂度O(n)
 
 
算法思路与代码实现:
 
注:
如果不知道第i个元素的指针位置,单链表数据结构在插入和删除操作上,与线性表的顺序存储结构是没太大优势的。但如果,我们希望从第i个位置插入10个元素,对顺序存储结构来说,每一次插入都需要移动n-i个元素,每次都是O(n);而对单链表来说,我们只需要在第一次找到第i个位置的指针,此时为O(n),接下来只是简单的通过赋值移动指针而已。
综上,对于插入或删除数据越频繁的操作,单链表的效率优势越是明显。
 
 
单链表的整表创建
1. 头插法
 
2. 尾插法
 
 
单链表的整表删除
 
 
单链表结构与顺序存储结构优缺点
 经验总结:
1. 若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。若需要频繁插入和删除时,宜采用单链表结构。
2. 当线性表中的元素个数变化较大或者根本不知道有多大时,最好用单链表结构,这样可以不需要考虑存储空间的大小问题。
原文地址:https://www.cnblogs.com/lyu0709/p/6770309.html