数据结构大纲

作者:姚博文 · 2026-08-09

数据结构学习笔记(考研复习大纲)

1\. 数据结构概述

1.1 基本概念

· **数据**:信息的载体,是对客观事物的符号表示。

· **数据元素**:数据的基本单位,在程序中通常作为一个整体考虑。

· **数据项**:构成数据元素的不可分割的最小单位。

:::annotation 30

:::

· **数据对象**:性质相同的数据元素的集合,是数据的子集。

1.2 数据结构的三要素

1. **逻辑结构**:数据元素之间的逻辑关系。

· 线性结构(线性表、栈、队列、串)

· 非线性结构(树、图、集合)

2. **存储结构(物理结构)**:数据结构在计算机中的表示。

· 顺序存储:逻辑相邻,物理相邻(如数组)

· 链式存储:逻辑相邻,物理不一定相邻(如链表)

· 索引存储:建立索引表

· 散列存储:根据关键字直接计算存储地址

3. **数据的运算**:对数据施加的操作(如插入、删除、查找、排序)。

**易错点**:逻辑结构是独立于计算机的,存储结构是依赖计算机的。**同一逻辑结构可以有多种存储结构**。

1.3 算法与时间复杂度

· **算法特性**:有穷性、确定性、可行性、输入、输出。

· **时间复杂度**:$T(n)$ 表示算法执行时间随问题规模 $n$ 的增长趋势。

· 常见复杂度排序:$O(1) < O(\log n) < O(n) < O(n\log n) < O(n^2) < O(n^3) < O(2^n) < O(n!)$

· **空间复杂度**:$S(n)$ 表示算法运行所需的辅助空间大小。

**易错点**:计算时间复杂度时,**忽略常数项和低阶项**,只保留最高阶项。递归算法的时间复杂度常与递推式相关,如 $T(n) = 2T(n/2) + O(n) \Rightarrow O(n\log n)$。

· * *

2\. 线性表

2.1 定义

线性表是具有相同数据类型的 $n$($n \geq 0$)个数据元素的有限序列。

2.2 顺序存储(顺序表)

· 用一组地址连续的存储单元依次存储元素。

· **随机访问**:$O(1)$ 时间访问第 $i$ 个元素。

· 插入/删除:平均移动约 $n/2$ 个元素,时间复杂度 $O(n)$。

**易错点**:顺序表插入时,从后往前移动元素;删除时,从前往后移动元素。注意数组下标从 0 开始,逻辑位序从 1 开始。

2.3 链式存储(链表)

· **单链表**:每个结点含数据域和指针域(指向后继)。

· **双链表**:每个结点含前驱指针和后继指针。

· **循环链表**:尾结点指向头结点。

| 操作 | 顺序表 | 单链表 |

| --- | --- | --- |

| 查找第 $i$ 个 | $O(1)$ | $O(n)$ |

| 插入/删除(已知位置) | $O(n)$ | $O(1)$(已知前驱) |

| 空间 | 预分配,可能浪费 | 按需分配 |

**易错点**:单链表在插入/删除时,**必须先处理后继指针**,再处理前驱指针,否则会丢失结点。头结点不存储数据,其作用是统一空表与非空表的操作。

· * *

3\. 栈和队列

3.1 栈(Stack)

· **后进先出(LIFO)**。

· 基本操作:`Push`(入栈)、`Pop`(出栈)、`Top`(取栈顶)。

· 顺序栈:利用数组实现,栈顶指针 `top` 指向栈顶元素。

· 共享栈:两个栈共享一个数组,节省空间。

3.2 队列(Queue)

· **先进先出(FIFO)**。

· 基本操作:`EnQueue`(入队)、`DeQueue`(出队)。

· **循环队列**:解决假溢出问题。

· 队空条件:$front == rear$

· 队满条件:$(rear + 1) \% MaxSize == front$

· 队列长度:$(rear - front + MaxSize) \% MaxSize$

\-

**易错点**:循环队列**牺牲一个存储单元**来区分队空和队满。若题中不牺牲空间,则需设置标志位或计数器。
**易错点**:循环队列**牺牲一个存储单元**来区分队空和队满。若题中不牺牲空间,则需设置标志位或计数器。

3.3 栈的代码实现

**顺序栈(C 语言