【408二轮强化】数据结构——线性表
以下是结合两篇内容整理的408数据结构线性表系统复习指南,涵盖核心考点、真题解析、代码模板及备考策略
📚 一、线性表基础概念
1. 定义与分类
类型 | 存储方式 | 特点 |
---|---|---|
顺序表 | 连续内存空间(数组) | 支持随机访问(O(1)),插入/删除需移动元素(O(n)) |
链表 | 非连续内存(节点+指针) | 顺序访问(O(n)),已知前驱时插入/删除O(1);未知时需遍历定位(O(n)) |
2. 易错点提醒
- 链表操作误区:链表插入/删除时间复杂度不一定是O(1),需先定位前驱节点。
- 存取方式:顺序表是随机存取(根据地址直接访问),链表是顺序存取(必须遍历)。
🔢 二、顺序表核心考点
1. 必会手写代码
✅ 逆置/循环移位(高频!)
// 三次逆置法(2010/2018/2020真题)
void Reverse(int A[], int left, int right) {while (left < right) {swap(A[left], A[right]); // 首尾交换left++; right--;}
}
// 循环左移p位:Reverse(A, 0, n-1); Reverse(A, 0, p-1); Reverse(A, p, n-1);
时间复杂度:O(n),空间复杂度:O(1) 。
✅ 元素重排(快排思想)
// 负数左移(2018真题)
void MoveNegatives(SqList &L) {int i = 0, j = L.length - 1;while (i < j) {while (i < j && L.data[i] < 0) i++; // 从左找非负数while (i < j && L.data[j] >= 0) j--; // 从右找负数if (i < j) swap(L.data[i], L.data[j]);}
}
2. 理解即可的算法
- 最小未出现正整数(2018真题):利用数组下标映射,O(n)时间+O(1)空间。
- 多数组操作(如三元组最小距离):三指针扫描法(2020真题)。
🔗 三、链表核心考点
1. 必会手写代码
✅ 单链表逆置(三指针法)
// 头插法或三指针法(2009/2013真题)
LinkList ReverseList(LinkList L)