在众多常用的数据结构中,线性表是最基本、最基础的数据结构,本文将从线性表的概念、分类、特点以及对比等方面展开。
1. 概念 |
线性表(Linear List)是 n(n≥0) 个数据元素的有限序列。
2. 分类 |
根据线性表的不同存储结构,可以将线性表分为顺序表和链表。下面分别对顺序表和链表进行讲解。
3. 顺序表 |
顺序表是线性表的顺序存储结构形式,其特点有:
- 逻辑上相邻的元素在物理位置上相邻
- 支持随机访问
顺序表可以简单地理解成“数组+长度”,如下图所示,当然这不是一种准确的说法,只是可以暂且这么理解和记忆。顺序表在内存中使用一组地址连续的存储单元来依次地存储数据元素,在存储空间分配之前需要指定空间的长度。
顺序表的优势主要是支持随机访问,在查找某一元素时可以使用索引访问,其时间复杂度为
。但是,因为顺序表中,逻辑上相邻的元素在物理位置上相邻,导致其在结构改变,即插入元素或者删除元素时,都涉及到之后所有元素的移动,因此时间复杂度为
。
4. 链表 |
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。根据指针的不同,链表可以分为多种形式,其中常见的有单链表、双链表和循环链表。
(1) 单链表
单链表用一组地址任意的存储单元存放线性表中的数据元素。如下图所示,链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
(2) 循环链表
循环链表是另一种形式的链式存贮结构,如下图所示。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环,其他性质与单链表一致。
顺便提及,单链表和循环链表判断表尾的方法不同:单链表用 p==NULL;循环链表用 p==L。
(3) 双链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。与单链表相比,双链表的每个结点多了指向前一个结点的指针。另外,还有双向循环链表,即在双链表的基础上,在头结点的前驱指针指向尾结点,尾结点的后继指针指向头结点,其他和双链表一致。
5. 对比 |
这里对线性表的两种存储形式——顺序表和链表进行一个简单的对比:
总结来说:存储的数据需要反复插入、删除,宜采用链表;存储的数据需要反复提取,很少插入、删除,宜采用顺序表。
6. 结语 |
本文简单的介绍了线性表,这是数据结构的基础也是重点。文中如有错误或者不当之处,还望指正,不胜感激!
7. 参考 |
(1) 百度百科:链表
(2) 百度百科:单链表
(3) 百度百科:循环链表
(4) 百度百科:双向链表
(5) 博客园:顺序表与链表