← 学习路线 💻 编程语言分享

数据结构与算法

red wenzi · 2026-09-20 · 计算机基础 · 语言无关 · 12 章 · 四语言对照 · 第 1、2、3 章已上线

这条线把数据结构与算法从语言教材里抽出来:概念本身不绑定语言,但代码必须能跑。所以每个结构都给你两版——先用语言自带的标准库把功能跑通,再手写一遍底层实现。

只学标准库,面试手写题会卡住;只学手写,工程里会重复造轮子。两版并排放在一起,你才知道标准库替你到底做了什么。

🎯 这条线的规矩:
① 每个结构 / 算法都给 C / C++ / Java / Python 四份完整可运行代码,函数名、变量名、打印格式全部对齐,方便横向对照;
② 每份代码都在 gcc 16.1 / g++ 16.1 / javac 21 / Python 3.14 下实测编译运行通过,四份输出逐字节一致;
③ 每个操作都标注时间 / 空间复杂度
④ 每章末尾有能直接照抄的运行命令。

🗂️ 章节导航(12 章)

标题状态
第 1 章链表 · 标准库与手写两版、反转、判环、找中点、合并有序链表✅ 已上线
第 2 章复杂度与算法分析 · 大 O、量级实测、均摊分析、递归栈、主定理、读题反推✅ 已上线
第 3 章数组、字符串与二分查找 · 数组代价实测、前缀和、差分、二分三写法、二分答案✅ 已上线
第 4 章双指针与滑动窗口 · 对撞、快慢、变长窗口📅 规划中
第 5 章哈希表 · 散列、冲突、扩容,与哈希加速套路📅 规划中
第 6 章栈与队列 · 循环队列、单调栈、单调队列📅 规划中
第 7 章树、二叉树与堆 · 遍历、BST、堆、Trie📅 规划中
第 8 章排序与查找 · 十种排序、稳定性、快选📅 规划中
第 9 章递归、分治与回溯 · 回溯模板、剪枝与去重📅 规划中
第 10 章贪心 · 区间调度、跳跃游戏与反例辨析📅 规划中
第 11 章动态规划 · 背包、子序列、区间 DP📅 规划中
第 12 章图论与高级结构 · 拓扑排序、最短路、并查集📅 规划中

章节顺序按「从具体到抽象」排:先写最基础的链式结构,再回头补复杂度分析这套工具,然后一路走到图论。

📌 已上线章节速览

第 1 章 链表

内容说明
链表 vs 数组内存布局、随机访问、插入删除、缓存友好度,一张表说清取舍
复杂度速查头插 / 尾插 / 查找 / 删除 / 反转 / 找中点 / 判环 / 合并,逐项标时间与空间
标准库写法C++ std::list、Java LinkedList、Python collections.deque 三段完整代码
手写底层实现C 结构体 + malloc/free、C++ new/delete、Java 类、Python 类 + __slots__,四段完整代码
面试高频四件套反转(三指针)、判环(Floyd)、找中点(快慢指针)、合并有序链表(哑结点)
易错点清单七条真实会踩的坑:断链、漏删头结点、忘释放、造环没拆、判空顺序反了等
练习5 题,从「讲清复杂度」到「找入环点」「合并 K 条有序链表」

👉 进入第 1 章 链表 →

第 2 章 复杂度与算法分析

内容说明
为什么不能只看秒表机器、编译器、输入规模三个变量都不可控,所以改数「操作次数」
大 O 怎么推导只留最高阶、丢掉常数系数;七个常见量级对照表
n=1000 实测五个量级的真实计数:二分只问 10 次,双重循环要 499500 次
均摊分析容量翻倍 vs 每次加 1,实测平均拷贝次数随 n 怎么变(0.94→1.00 对 7.50→511.50)
空间复杂度与递归栈同样的活,递归写栈深度 100 层、迭代写 1 层
主定理速查三种情形 + 四个常见递归式套用(归并 / 二分 / 树遍历)
读题反推从 n 的范围反推该用什么算法,六档经验表
常见误区八条:O(1) 不等于快、循环层数不等于复杂度、均摊 O(1) 不等于每次都 O(1)

👉 进入第 2 章 复杂度与算法分析 →

第 3 章 数组、字符串与二分查找

内容说明
数组的代价实测随机访问 1 次取值;头部插入要移动 1000 个元素、删除头部 1001 个,而两端操作都是 0
字符串四语言差异C 的 '\0'、Java / Python 不可变、循环拼接为什么会变成 O(n²)
前缀和预处理 O(n),区间查询降到 1 次减法;二维版本用容斥原理
差分数组区间批量加从 O(n) 降到 2 次修改,代价挪到最后的 O(n) 还原
二分查找三写法闭区间 / 左闭右开 / lower_bound,附六个边界用例(空数组、单元素、首尾元素、不存在)
二分答案切木头实例:从枚举 24 次降到判定 4 次;三张题型对照表
选型速查与误区什么时候用前缀和 / 差分 / 二分 / 滑动窗口;七条常见误区

👉 进入第 3 章 数组、字符串与二分查找 →

🧭 学这条线之前

这条线不要求你先精通某一门语言,但需要你至少能读懂指针 / 引用和结构体 / 类:

前置在哪学
C 的指针与结构体C 第 6 章 指针与动态内存 · 第 7 章 结构体与枚举
C++ 的指针与内存模型C++ 第 4 章 指针、数组与内存模型
Java 的类与对象Java 第 4 章 类与对象
Python 的类Python 第 7 章 面向对象
⚠️ 代码里的内存安全:C / C++ 手写链表要自己 free / delete,忘记释放就是内存泄漏;Java / Python 交给 GC,但要注意「造了环」会让引用计数型回收器(如 C++ 的 shared_ptr)无法回收。本章代码里演示造环之后都会立刻把环拆掉。
📚 这条线的概念都在知识大全:

链表 · 时间复杂度 · 指针 · 动态内存 malloc/free · STL · Java 集合框架 · Python 容器