数据结构与算法概述
什么是数据结构与算法
数据结构是组织和存储数据的方式。数组、链表、栈、队列、树、图、哈希表——每种数据结构都有自己的特点,适合不同的场景。
算法是解决问题的步骤。排序、搜索、遍历、动态规划、贪心——每种算法都是针对一类问题的通用解法。
为什么要学数据结构与算法
编程的基本功。 数据结构和算法是所有编程任务的基础。不会数据结构,你可能用一个列表去实现本该用哈希表完成的任务,性能差几个数量级。
面试的核心考核。 大厂技术面试中,算法题是必考项。LeetCode 上刷几百道题几乎是求职标配。
培养计算思维。 学算法不只是学具体的解题技巧,更是培养分解问题、抽象建模、分析复杂度的思维方式。
理解 AI 和底层系统。 搜索引擎用图算法,数据库用 B+ 树,编译器用语法树,推荐系统用图和矩阵运算。
核心知识模块
基础数据结构
- 数组与链表:连续存储 vs 指针链接,随机访问 vs 顺序访问
- 栈与队列:后进先出(LIFO)vs 先进先出(FIFO)
- 哈希表:键值映射,冲突处理,O(1) 平均查找
- 树:二叉树、二叉搜索树、AVL 树、红黑树
- 图:邻接矩阵 vs 邻接表,有向图 vs 无向图
基础算法
- 排序:冒泡、选择、插入、归并、快排、堆排序
- 搜索:线性搜索、二分搜索、BFS、DFS
- 递归:递归思维、递归转迭代
高级主题
- 动态规划:最优子结构、重叠子问题、状态转移方程
- 贪心算法:局部最优到全局最优的条件
- 分治法:大问题拆成小问题,分别解决再合并
- 图算法:最短路径(Dijkstra、Floyd)、最小生成树(Prim、Kruskal)、拓扑排序
- 高级数据结构:堆、并查集、线段树、Trie 树
复杂度分析
- 时间复杂度:O(1)、O(log n)、O(n)、O(n log n)、O(n^2)
- 空间复杂度:算法需要多少额外内存
- 最好/最坏/平均情况:不同输入下的性能差异
怎么学
先学基础数据结构,再学算法。 数据结构是算法的载体。不理解链表,就很难理解链表排序。
刷题是必须的,但要带着思考刷。 每道题做完后,问自己:这道题用了什么数据结构?什么算法?时间复杂度是多少?
按专题刷,不要随机刷。 先把数组和字符串的题刷完,再刷链表,再刷树,再刷动态规划。
画图辅助理解。 链表的指针变化、树的旋转、图的遍历——画图比纯文字高效得多。
本模块资源
| 资源 | 类型 | 说明 |
|---|---|---|
| Berkeley CS61B | 课程 | Berkeley 数据结构课程,Java 实验 |
| MIT 6.006 | 课程 | MIT 算法入门课 |
| Princeton Algorithms | 课程 | Princeton 算法课程,Sedgewick 主讲 |
| VisuAlgo | 工具 | 数据结构和算法可视化 |