Menu
CoddyTech
学习路径

Swift 数据结构与算法

Swift 标准库提供了 Array、Dictionary 和 Set,仅此而已:没有队列、堆、链表或树。在这条路径中,你会用 Swift 亲手实现每一种结构,用类表示节点,用 weak 表示反向链接,再用它们做排序、递归和图搜索,最后完成自动评分的面试题。全部免费,在浏览器中学习,大多数课程都有证书。

377 节课284 个挑战702 道测验题

Swift 数据结构与算法,循序渐进

38 门课程377 节课284 个挑战702 道测验题

每一步都由 Coddy 现有的几门课程组成,每个“开始”按钮都会以 Swift 打开课程。还没有 Swift 版本的三门课程列在步骤之后。

  1. 1
    开始这一步开始栈、队列、二叉树、哈希表和链表,每种都先用 Swift 从零实现,再用来解决问题。学完后,你会知道为什么 Array 适合当栈却不适合当队列,以及 Dictionary 替你做了什么。开始
  2. 2
    开始这一步开始双向链表、堆和优先队列、字典树、图,以及自平衡的 AVL 树:这些都是标准库没有提供的结构。双向链表正是 weak 大显身手的地方,而你在这里写的堆,就是图算法那一步要用的堆。开始
  3. 3
  4. 4
    开始这一步开始用 Swift 完成递归挑战。递归和 indirect enum 天生搭配,这是一种允许包含自身的类型;Swift 不保证尾调用优化,所以足够深的递归会因栈溢出而崩溃,而不是无限运行下去。动态规划和位运算列在步骤之后,因为它们用 Python 和 C++ 讲授。开始专属页面
  5. 5
    开始这一步开始用 Swift 实现广度优先搜索和深度优先搜索、Dijkstra、Bellman-Ford、拓扑排序、Kruskal 和 Prim,基于你在第二步构建的图。标准库没有优先队列,所以 Dijkstra 需要的堆,正是你在第二步写的那个。开始
  6. 6
    开始这一步开始十个面试挑战题包和两个编程题库,全部用 Swift 完成,由测试用例评分:面对陌生的问题,不看教程独立解决,值类型和引用也都由你有意识地选择。途中要留意 Swift 的一条规则:算术溢出会在运行时触发陷阱,所以依赖回绕的代码要用 &+、&- 和 &*。开始
你将获得
学编程所需的一切

在实践中学习

编写真实代码、查询数据库、搭建网站、掌握 AI 提示词。我们的互动课程涵盖现代开发者需要的每一项技能。

playground.js
代码编辑器
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
测试 #1test Case Success icon
测试 #2test Case Success icon
测试 #3test Case Failure icon
输入
"Alex"
输出
"Hello, Coddy! Alex"

打造你的连胜

坚持下去,看着自己不断进步!记录每天的编程习惯,用冻结天数保护连胜,每天打卡都能赢取奖励。

12 天连胜

明天再来,保持你的连胜!

fire Filled icon
left icon

January 2026

right icon

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

product Double Or Nothing icon

加倍或归零

第 5 天,共 7 天

fire Freeze icon

连胜冻结

2 left

随时随地写代码

随时随地继续你的编程学习旅程!无需配置,无需下载:打开就能写代码。支持 iOS、Android 和 Web,评分高达 4.9 星。

Python
7连胜
250分数
5能量
变量
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Right Done icon
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Left Done icon
journey Hex Active Base iconjourney Hex Active Shadow iconjourney Hex Active Top iconjourney Lesson Theory Challenge icon
继续
journey Path Right icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson Theory Challenge icon
journey Path Left icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson All icon
学习旅程
目标
排行榜
个人主页
4.9
星星星星星
评分

你并不孤单

在全球排行榜上一较高下,邀请好友赢取奖励,为彼此的成就喝彩。和好友一起编程更有趣!

挑战者联赛
挑战者联赛前 7 名晋级
leaderboard First icon1
avatar 1 icon
fire Filled icon
Alex7+ Days
2840
leaderboard Second icon2
avatar 2 icon
fire Filled icon
Jordan7+ Days
2650
leaderboard Third icon3
avatar 3 icon
fire Filled icon
Sam7+ Days
2420
4
avatar 4 icon
Casey
2180
5
avatar placeholder icon
fire Filled icon
Morgan7+ Days
1950
leaderboard Arrow Up icon晋级区leaderboard Arrow Up icon

多种学习方式

阅读、收听、自我测验、问 AI,或者查阅学过的任何内容。每节课都配合你的节奏。

变量入门
音频

变量是一个有名字的容器,用来存储值,方便你在程序后面引用。

在 Python 中,创建变量只需写下名字、一个等号,再写上要存储的值。

值可以随时间变化。给这个名字重新赋值,它就会指向新的值。

1xSarah

获得证书

每完成一门课程都能获得证书。把证书添加到你的 LinkedIn 个人资料和简历中,向雇主展示你的编程能力。

Coddy结业证书
兹证明张三已成功完成
python iconPython 基础
已验证
日期2026年1月
LinkedIn添加到 LinkedIn

为什么在 Coddy 上用 Swift 学数据结构与算法

  • Swift 没有提供的那些结构。标准库没有队列、双端队列、堆、链表或树,所以需要这些结构的 Swift 面试题会默认你自己写出来。在这条路径中你会这样做,然后在图算法和面试课程中使用它们。写过之后,再读 Apple 开源的 swift-collections 包及其 Deque 和 Heap,感受会完全不同。
  • 值类型与引用,变得具体。Array、Dictionary 和 Set 是带写时复制的值类型,所以传来传去的开销很小,直到有人修改它。树节点不能这样工作:它必须是类,或者是 indirect enum,而父指针必须是 weak,否则 ARC 永远不会释放这个循环。在数据结构中,Swift 的内存模型不再只是理论。
  • 几乎整条路径都用 Swift。每种数据结构、排序、图算法、递归挑战和面试题包都用 Swift 讲授。有三门课用其他语言讲授,列在步骤之后,各附链接:动态规划和 Python 面试系列用 Python,位运算用 C++。位运算从 Swift 读起来很轻松,因为 Swift 和 C++ 共用 &、|、^、~、<< 和 >>。
  • 像面试一样评分。每节课都以一道 Swift 挑战结束,由测试用例检查。没通过时,Bugsy 会阅读你的代码,引导你找到修复方法,而不是直接给出答案。大多数课程提供免费证书,每张证书都可以通过专属 URL 验证。

关于用 Swift 学数据结构与算法的常见问题

Swift 适合学习数据结构与算法吗?

适合。泛型、Comparable 和 Hashable 等协议,以及可选类型,让一个 next 可能为 nil 的节点在类型上就一目了然,编译器会检查每一次使用。有两点值得尽早了解:标准库很精简,所以队列和堆要你自己写;集合是值,所以把数组赋给一个新变量再修改它,原数组不受影响,这会让从 Java 或 JavaScript 转过来的人感到意外。

Swift 的哪些类型对应哪些数据结构?

Array 是动态数组,配合 append 和 popLast() 也是栈;Dictionary 和 Set 是哈希表。标准库就只有这些。Apple 开源的 swift-collections 包增加了 Deque、Heap、OrderedSet 和 OrderedDictionary;链表、树、字典树和图要你在第一步和第二步中自己实现。

为什么 Swift 中的树节点必须是类?

因为结构体是值。它不能拥有自身类型的存储属性,即使是可选的也不行;而且只要它存放的是副本,比如在数组中,修改副本就不会影响原值。类的实例是引用,所以节点之间可以互相指向;indirect enum 也可以,适用于从不原地修改的树。问题在于 ARC:父指针必须是 weak,否则父节点和子节点会互相保持对方存活,整棵树永远不会被释放。

如何在 Swift 中写一个高效的队列?

不要用 removeFirst():在 Array 上它会移动剩下的每个元素,所以每次出队都是 O(n)。可以维护一个头部索引并让它前移,或者用两个数组:入队时压进收件数组,出队时从发件数组弹出,发件数组空了就把收件数组反转后填进去。两种方法都能让出队达到均摊 O(1)。swift-collections 的 Deque 会替你完成这些,而第一步会让你亲手实现一个队列。

这条路径中哪些课程不是用 Swift 讲授的?

有三门:动态规划和 Python 面试系列用 Python 讲授,位运算用 C++ 讲授。它们列在步骤之后,每门都附有链接,会以对应的语言打开。在 Swift 中,备忘录就是一个数组或 Dictionary;Swift 的整数自带 nonzeroBitCount 和 trailingZeroBitCount,用一个属性就能完成 C++ 位运算技巧要手写的工作。

开始这条路径前需要先会 Swift 吗?

至少要了解结构体、类、可选类型、泛型和协议。如果这些对你来说还很陌生,可以先学 Coddy 免费的 Swift 课程,学完后再从这条路径继续。

完成数据结构与算法路径能获得证书吗?

能。完成每一步,你就能获得整条数据结构与算法路径的一张免费证书。证书会列出你沿途完成的每门课程,并链接到每门课程各自的证书,任何人都能核实上面列出的每项技能。你可以把它添加到 LinkedIn 个人资料。这是 Coddy 颁发的结业证书,不是经过认证的学历资格。

其他学习路径

同样的课程,按不同职业方向编排。进度会保留:在一条路径上完成的课程,在所有包含它的路径上都算完成。

全部学习路径
Coddy 编程语言插图

免费开始数据结构与算法路径

开始学习