线性表是最基本、最简单的数据结构,包含顺序存储和链式存储两种实现方式。
顺序表:用一段地址连续的存储单元依次存储线性表的数据元素。逻辑上相邻的元素在物理位置上也相邻,支持随机访问,时间复杂度 O(1)。
链表:用一组任意的存储单元存储线性表的数据元素,通过指针链接各结点。逻辑上相邻的元素在物理位置上不一定相邻,只能顺序访问,时间复杂度 O(n)。
链表的常见变体:
| 概念 | 定义 |
|---|---|
| 顺序表 | 用数组实现,逻辑相邻则物理相邻,支持随机存取 |
| 单链表 | 每个结点包含数据域和一个指向后继的指针域 |
| 双链表 | 每个结点包含前驱指针、数据域、后继指针 |
| 头结点 | 链表第一个附加结点,数据域可空,简化边界处理 |
| 头指针 | 指向链表第一个结点(头结点或首元结点)的指针 |
| 循环链表 | 尾结点的指针指向头结点,形成环 |
| 考点 | 说明 |
|---|---|
| 顺序表与链表的对比 | 从存取方式、空间利用、插入删除效率等维度比较 |
| 链表的插入删除操作 | 头插法、尾插法、指定位置插入、删除等指针操作 |
| 双链表操作 | 插入/删除需修改四个指针域,常考操作序列 |
| 顺序表的插入删除 | 平均移动元素次数:插入 $n/2$,删除 $(n-1)/2$ |
| 头结点的作用 | 统一空表和非空表的操作,避免判断头指针是否为空 |
| 判空条件 | 顺序表:$length==0$;带头结点单链表:$L\text{->next==NULL}$ |
length 减 1。↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。