算法复杂度 / Big-O
- Harvard CS50 - 渐进符号(视频) (2026-01-28)
- Derek Banas - 大 O 符号(视频) (2026-01-28)
- MIT 6.046J - 大 O 符号(以及Ω和Θ)(视频)
- Steven Skiena - 算法分析(视频)
- UC Berkeley CS61B - 大 O 符号(视频)
- MIT 6.046J - 摊还分析(视频) (2026-01-29)
- TopCoder - 计算复杂性:第 1 部分 + 第 2 部分(包括递归关系和主定理)
- Michael Sambol - 18 分钟分析算法(视频) (2026-01-29)
- Big-O 速查表
数据结构
数组(Arrays)
- Harvard CS50 - 数组(视频) (2026-01-29)
- UC San Diego - 数组(视频)
- UC San Diego - 动态数组(视频)
- UC Berkeley CS61B - 线性和多维数组(视频)(从 15 分 32 秒开始)
- Python - 嵌套列表(视频)
- 实现一个动态数组(可自动调整大小的可变数组) (2026-02-01)
链表(Linked Lists)
- Harvard CS50 - 链表(视频) (2026-02-07)
- UC Berkeley CS61B - 链表 1(视频)
- UC Berkeley CS61B - 链表 2(视频)
- Michael Sambol - 4 分钟了解链表(视频) (2026-02-28)
- MyCodeSchool - 链表 C 语言实现(视频) 不是整个视频,只是关于 Node 结构和内存分配的部分。(2026-02-28)
- Steve Summit - 指向指针的指针(文章) 的确:你需要关于“指向指针的指针”的相关知识:(因为当你传递一个指针到一个函数时,该函数可能会改变指针所指向的地址)该页只是为了让你了解“指向指针的指针”这一概念。但我并不推荐这种链式遍历的风格。因为,这种风格的代码,其可读性和可维护性太低。(2026-02-28)
- 实现单向链表 (2026-02-28)
- UC San Diego - 单链表(视频)
- UC San Diego - 链表 vs 数组:核心差异(视频)
- UC San Diego - 链表 vs 数组:现实世界应用(视频)
- UC San Diego - 双向链表介绍(视频) 并不需要实现。
堆栈(Stack)
- Michael Sambol - Stacks in 3 minutes (2026-03-01)
- UC San Diego - 堆栈
可以不实现,因为使用数组来实现是微不足道的事
队列(Queue)
- Michael Sambol - Queues in 3 minutes (2026-03-01)
- 圆形队列
- UC San Diego - 队列
- 实现队列 (2026-03-04)
哈希表(Hash table)
-
视频:
-
在线课程:
-
使用线性探测法的数组实现
- hash(k, m) - m 是哈希表的大小
- add(key, value) - 如果键已存在,则更新值
- exists(key) - 检查键是否存在
- get(key) - 获取给定键的值
- remove(key) - 删除给定键的值