2. 线性表
前言:数据结构有三要素,逻辑结构、运算和存储结构。
2.1 线性表的逻辑结构
一个线性表是n个数据元素的有限序列。这里的数据元素是相同的数据类型,占用的空间一样大。eg:所有的整数不是线性表,不是有限的序列。
2.2 线性表的顺序存储结构
2.1.1 简介
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。
2.1.2 线性表有以下特点:
-
只要确定了线性表的起始位置,线性表中任一数据元素都可以随机存取。eg:数组用数组下标a[i]。
-
存储密度高,每个节点只存储数据元素。链式存储会记录前后驱的位置等。
-
拓展容量不方便。因为需要大片的连续空间。
-
插入删除不方便。插入删除位置后的元素需要整体向后或向前平移。
2.1.3 线性表实现方式:
- 静态分配:用静态数组存放的元素,顺序表的长度开始确定后无法改变。
- 动态分配,C语言中用malloc/free申请/释放一个数据空间。
2.1.4 常见时间复杂度
| 插入(删除、按值查找) | 情况 | 时间复杂度 |
|---|---|---|
| 最好 | 插入表尾,循环0次 | O(1) |
| 最坏 | 插入表头,循环n次 | O(n) |
| 平均 | 插入可取位置i=1,2,...,length+1 | O(n) |
| 按位查找 | 求表长,取a[i],随机存取 | O(1) |
2.2 线性表的链式存储结构
2.2.1 简介
线性表的链式存储结构是指用一组任意的存储单元存储线性表的数据元素。一个结点包括存放数据元素的数据域和存放后继位置的指针域。(此处只指将单链表,其他类型的链表后续单独讲一篇)
2.2.2 特点
-
由于它不要求逻辑上相邻的元素物理位置上也相邻,因此它没有顺序结构所具有的弱点,但同时也失去了顺序表可随机存取的优点。
-
耗费空间存放指针。
-
改容量方便
2.2.3常见概念
-
头指针:指向链表中第一个结点。注:不带头结点,头指针指向的结点有数据。
-
头结点:有时,我们在单链表的第一个结点之前附设一个头结点,头结点的数据域可以不带任何存储信息。引入头结点带来两个优点。
-
由于第一个数据结点的位置被存放在头结点的指针域中,因此链表的第一个位置上的操作和在表的其他位置上的操作一致,无须进行特殊处理。
-
无论链表是否为空,其头指针都指向头结点的非空指针(空表中头结点的指针域为空),因此空表和非空表的处理也就得到了统一。
-

浙公网安备 33010602011771号