首页/数据结构/线性表/顺序表和链表的对比 🔗 在 Obsidian 中打开
数据结构 · 线性表

顺序表和链表的对比

难度 ★★重要度 ★★ 考查频率 低题型 选择 / 简答 顺序表链表对比分析
速查
线性表两种基本物理实现:顺序表(连续空间、随机访问 $O(1)$、存储密度=1)与链表(任意空间、指针链接、插入删除 $O(1)$ 已知位置)。顺序表适合读多写少,链表适合写多读少

概述

线性表有两种基本的物理存储实现方式:

  • 顺序表:用一段连续的存储空间依次存储数据元素。
  • 链表:用任意的存储空间存放元素,通过指针链接。

核心概念

顺序表(Sequential List)

typedef struct {
    ElemType data[MaxSize];  // 静态分配
    int length;
} SqList;

链表(Linked List)

typedef struct LNode {
    ElemType data;
    struct LNode *next;
} LNode, *LinkList;

对比

存储方式对比

特性顺序表链表
存储空间连续的预分配空间不连续的动态分配
存储密度高(=1)低(<1,有指针开销)
容量固定/可扩容动态增长
逻辑关系隐含(位置)显式(指针)

操作时间复杂度对比

操作顺序表链表
按位查找 GetElemO(1)O(n)
按值查找O(n)O(n)
插入/删除(已知位置)O(n) 移元素O(1) 改指针
尾部插入O(1)(有空间)O(1)(有尾指针)

手算示例

插入平均移动次数:在长度为 $n$ 的顺序表第 $i$ 个位置插入,平均移动

$$E = \frac{1}{n+1}\sum_{i=1}^{n+1}(n-i+1) = \frac{n}{2}$$

删除平均移动次数

$$E = \frac{1}{n}\sum_{i=1}^{n}(n-i) = \frac{n-1}{2}$$

存储密度:单链表结点存 int(4B)+ 指针(4B),密度 $= 4/(4+4) = 0.5$。

常见考法

命题套路适用场景判断(频繁按下标访问→顺序表,中间频繁增删→链表)、移动次数计算、方案设计、综合比较。

易错点

必记
  1. 链表插入删除整体也可能是 $O(n)$:需先查找位置。
  2. 顺序表尾部插入不总是 $O(1)$:满时需扩容 $O(n)$。
  3. 存储密度 $\neq$ 空间利用率。
  4. 链表不支持随机访问(不能用 `L[i]`)。

核心结论

维度顺序表胜链表胜
随机访问✅ O(1)❌ O(n)
存储密度✅ =1❌ <1
插入删除❌ O(n)✅ O(1)
容量灵活✅ 动态
缓存友好✅ 连续❌ 分散

核心结论:顺序表适合读多写少,链表适合写多读少

记忆卡片

顺序表最大优势?
随机访问 O(1)。
中间插入平均移动?
n/2 个。
链表存储密度<1 原因?
有指针域开销。
尾部插入何时 O(n)?
动态顺序表满需扩容。
链表 O(1) 的前提?
已知插入/删除位置。
适用场景?
读多→顺序表;写多→链表。

交互动画 · 谁更胜一筹

顺序表 连续空间 · 随机访问 ✓ 胜出 链表 任意空间 · 指针链接 ✓ 胜出
选择一个操作,查看哪种结构更占优
顺序表读多写少,链表写多读少

相关知识点

暂无关联知识点

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。