Rust 数据结构与算法
Rust 标准库提供了大部分数据结构(Vec、VecDeque、HashMap、BTreeMap、BinaryHeap),而对于你自己写的结构,借用检查器自有主张:单向链表是 Option<Box<Node>>,带父节点链接的树则需要 Rc、RefCell 和 Weak。在这条路径中,你会用 Rust 亲手实现每一种结构,再用它们做排序、递归和图搜索,最后完成自动评分的面试题。全部免费,在浏览器中学习,大多数课程都有证书。
377 节课284 个挑战702 道测验题
- 适合初学者
AI 辅助编程帮助
动手实践的互动课程
每节课都有语音讲解
检验所学的测验
终点有一张路径证书,沿途还有 23 张
Rust 数据结构与算法,循序渐进
每一步都由 Coddy 现有的几门课程组成,每个“开始”按钮都会以 Rust 打开课程。还没有 Rust 版本的三门课程列在步骤之后。
- 1
- 2
- 3
- 4
- 5
- 6
在实践中学习
编写真实代码、查询数据库、搭建网站、掌握 AI 提示词。我们的互动课程涵盖现代开发者需要的每一项技能。
打造你的连胜
坚持下去,看着自己不断进步!记录每天的编程习惯,用冻结天数保护连胜,每天打卡都能赢取奖励。
12 天连胜
明天再来,保持你的连胜!
January 2026
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
21
22
23
24
25
26
27
28
29
30
加倍或归零
第 5 天,共 7 天
连胜冻结
2 left
随时随地写代码
随时随地继续你的编程学习旅程!无需配置,无需下载:打开就能写代码。支持 iOS、Android 和 Web,评分高达 4.9 星。
你并不孤单
在全球排行榜上一较高下,邀请好友赢取奖励,为彼此的成就喝彩。和好友一起编程更有趣!
多种学习方式
阅读、收听、自我测验、问 AI,或者查阅学过的任何内容。每节课都配合你的节奏。
变量是一个有名字的容器,用来存储值,方便你在程序后面引用。
在 Python 中,创建变量只需写下名字、一个等号,再写上要存储的值。
值可以随时间变化。给这个名字重新赋值,它就会指向新的值。
获得证书
每完成一门课程都能获得证书。把证书添加到你的 LinkedIn 个人资料和简历中,向雇主展示你的编程能力。
为什么在 Coddy 上用 Rust 学数据结构与算法
- 在最难的地方理解所有权。链表和树是 Rust 规则最先让你碰壁的地方:每个值只有一个所有者,而这些结构偏偏需要互相指向的节点。在编写它们的过程中,
Box、Option::take、Rc<RefCell<T>>和Weak不再只是语法,而变成了一个个设计决策。这也是为什么有一本知名的 Rust 教程叫作《Learning Rust With Entirely Too Many Linked Lists》。 - 开销清晰的集合类型。
Vec<T>是你的栈,VecDeque<T>是环形缓冲区,也是你的队列,HashMap是能抵御恶意哈希冲突的哈希表,BTreeMap是有序的 B 树,BinaryHeap<T>是最大堆。把这些结构亲手实现一遍,你就知道一道题需要哪一种,也明白 Dijkstra 为什么要把条目包在Reverse里。 - 几乎整条路径都用 Rust。每种数据结构、排序、图算法、递归挑战和面试题包都用 Rust 讲授。有三门课用其他语言讲授,列在步骤之后,各附链接:动态规划和 Python 面试系列用 Python,位运算用 C++。位运算几乎可以直接迁移,只有一处写法不同:Rust 把按位取反写作
!x,并用count_ones()统计置位的位数。 - 像面试一样评分。每节课都以一道 Rust 挑战结束,由测试用例检查。没通过或编译不过时,Bugsy 会阅读你的代码,引导你找到修复方法,而不是直接给出答案。大多数课程提供免费证书,每张证书都可以通过专属 URL 验证。
关于用 Rust 学数据结构与算法的常见问题
Rust 适合学习数据结构与算法吗?
sort 是稳定排序,安全 Rust 在编译时就杜绝了悬垂指针和数据竞争,而且没有垃圾回收。但要编写基于指针的结构,它比 C 或 Java 更难,因为所有权不允许共享的可变链接,除非你主动使用 Rc 和 RefCell,而双向链表和带父指针的树恰恰由这些构成。这份难度本身也是一课:一旦你能用 Rust 写出它们,你就完全清楚谁拥有什么。Rust 的哪些集合类型对应哪些数据结构?
Vec<T> 是动态数组,也是你的栈;VecDeque<T> 是环形缓冲区,也是你的队列;HashMap 和 HashSet 是哈希表(默认使用 SipHash,以一定的速度为代价抵御恶意冲突);BTreeMap 和 BTreeSet 是有序的 B 树;BinaryHeap<T> 是最大堆;LinkedList<T> 是双向链表,但你很少会选它而不用 Vec 或 VecDeque。Rust 没有字典树或图类型,这些要你自己实现。为什么在 Rust 中写链表这么难?
Option<Box<Node>> 拥有下一个节点。双向链表或带父链接的树则不符合,因为每个节点都有两个指针指向它,所以你要用 Rc<RefCell<Node>>,并用 Weak 表示反向链接,或者把节点放进一个 Vec,用索引把它们连起来。《Learning Rust With Entirely Too Many Linked Lists》之所以存在,正是因为太多人卡在了这里。在 Rust 中如何得到最小堆?
BinaryHeap<T> 是最大堆,所以要把每个元素包进 std::cmp::Reverse:推入 Reverse(x),最小的 x 就会最先出来。对于 Dijkstra,推入 Reverse((distance, node)),元组会先按距离比较。在第二步亲手写过堆之后,反转它的顺序就是显而易见的事了。这条路径中哪些课程不是用 Rust 讲授的?
Vec 或 HashMap;整数溢出在调试构建中会 panic,所以依赖回绕的位运算技巧要明确写成 wrapping_add 或 wrapping_mul。开始这条路径前需要先会 Rust 吗?
Option;Box 和 trait 会有帮助。如果这些对你来说还很陌生,可以先学 Coddy 免费的 Rust 课程,学完后再从这条路径继续。完成数据结构与算法路径能获得证书吗?
能。完成每一步,你就能获得整条数据结构与算法路径的一张免费证书。证书会列出你沿途完成的每门课程,并链接到每门课程各自的证书,任何人都能核实上面列出的每项技能。你可以把它添加到 LinkedIn 个人资料。这是 Coddy 颁发的结业证书,不是经过认证的学历资格。