算法是程序的骨架,数据结构是算法的舞台。这份笔记整理数据结构与算法课程的核心内容,覆盖数据结构基础、线性结构、算法复杂度、查找算法和排序算法,并附带一份复杂度速查表。
学习路线
1 | 数据结构基础 |
内容概览
第一章:数据结构
- 数据结构基础:逻辑结构、存储结构、数据运算、内存,以及数据结构与算法的关系;
- 数组:连续存储、随机访问、动态扩容、按位置插入、尾部插入、按位置删除、尾部删除和遍历;
- 链表:节点、数据域、指针域、单链表组织方式,以及创建、遍历、插入、删除和释放;
- 栈:后进先出(LIFO)、栈顶、入栈、出栈、查看栈顶,以及数组栈和链式栈;
- 队列:先进先出(FIFO)、队头、队尾、入队、出队,以及顺序队列、循环队列和链式队列。
第二章:算法
- 算法基础:算法定义、输入、输出、有限性、时间复杂度和空间复杂度;
- 查找算法:顺序查找、二分查找,以及不同查找算法的前提条件和复杂度;
- 排序算法:常见排序思想、冒泡排序、快速排序、复杂度、稳定性和适用场景。
复杂度速查
| 结构或算法 | 典型操作 | 时间复杂度 | 说明 |
|---|---|---|---|
| 数组 | 按下标访问 | O(1) |
连续存储支持随机访问 |
| 数组 | 中间插入或删除 | O(n) |
通常需要移动后续元素 |
| 链表 | 按位置查找 | O(n) |
需要从头节点逐步遍历 |
| 链表 | 已定位节点后的插入或删除 | O(1) |
不包含定位节点本身的成本 |
| 栈 | 入栈、出栈、查看栈顶 | O(1) |
操作集中在栈顶 |
| 队列 | 入队、出队 | O(1) |
取决于具体实现方式 |
| 顺序查找 | 查找元素 | O(n) |
可处理无序数据 |
| 二分查找 | 查找元素 | O(log n) |
前提是数据有序且支持按位置访问 |
| 冒泡排序 | 排序 | O(n²) |
适合用于理解排序过程 |
| 快速排序 | 排序 | 平均 O(n log n) |
最坏情况通常为 O(n²) |
建议的学习方式
- 先阅读数据结构基础,建立逻辑结构、存储结构和内存模型的整体认识;
- 分别画出数组、链表、栈和队列的存储示意图,再阅读对应操作;
- 对每个操作记录前置条件、数据变化、边界情况和复杂度;
- 学习查找和排序时,手工跟踪一组小规模数据的执行过程;
- 阅读课件后再补充独立代码实现,并为关键操作编写测试用例。
后续扩展方向
当前仓库以课程资料和学习索引为主,后续可以按课件章节补充数组、链表、栈、队列、查找和排序算法的代码实现、边界测试及复杂度实验记录。