Menu
CoddyTech
学习路径

Lua 数据结构与算法

Lua 只有一种数据结构:表。所以这条路径上的每种结构都由表构成:用数组部分做栈,用两个索引做队列,用互相指向的表做树。在这条路径中,你会用 Lua 亲手实现每一种结构,再用它们做排序、递归和图搜索,最后完成自动评分的面试题。全部免费,在浏览器中学习,大多数课程都有证书。

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

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

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

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

  1. 1
    开始这一步开始栈、队列、二叉树、哈希表和链表,每种都先用 Lua 从零实现,再用来解决问题。Lua 的表本身就是哈希表,所以这一步会告诉你它替你做了什么,以及如何把它塑造成另外四种结构。开始
  2. 2
    开始这一步开始双向链表、堆和优先队列、字典树、图,以及自平衡的 AVL 树。在 Lua 中,字典树的节点就是一个以下一个字符为键的表,图就是一个邻接列表构成的表,所以每种结构的复杂程度,只取决于它背后的思想。开始
  3. 3
    开始这一步开始冒泡、选择、插入、归并、快速、堆、计数和基数排序,用 Lua 编写,并在可视化工具中观察运行过程。Lua 参考手册明确指出 table.sort 不是稳定排序;学完这一步,你就知道排序为什么会放弃稳定性,以及如何用一个打破平局的索引把它找回来。开始
  4. 4
    开始这一步开始用 Lua 完成递归挑战。Lua 支持真正的尾调用:处在尾部位置的调用 return f(x) 会复用调用者的栈帧,所以尾递归循环永远不会让栈增长。普通的深层递归仍然会以栈溢出结束。动态规划和位运算列在步骤之后,因为它们用 Python 和 C++ 讲授。开始专属页面
  5. 5
    开始这一步开始用 Lua 实现广度优先搜索和深度优先搜索、Dijkstra、Bellman-Ford、拓扑排序、Kruskal 和 Prim,基于你在第二步构建的图。Lua 没有优先队列,所以 Dijkstra 需要的堆就是你在第二步写的那个,而广度优先搜索需要一个从不调用 table.remove(t, 1) 的队列。开始
  6. 6
你将获得
学编程所需的一切

在实践中学习

编写真实代码、查询数据库、搭建网站、掌握 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 上用 Lua 学数据结构与算法

  • 一种结构,构成所有结构。Lua 的表同时包含数组部分和哈希部分,除此之外没有任何内置结构:没有列表类型、集合、队列或堆。在 Lua 中,每种结构都是互相指向的表,这能让你最清楚地看到链表或树的本质。
  • 适用于 Roblox、游戏和插件。Lua 驱动着 Roblox(以 Luau 的形式)、游戏脚本、Neovim 配置和 Redis 脚本,而游戏代码就是数据结构代码:背包是哈希表,回合顺序是队列,寻路是图搜索。用 Lua 学数据结构,就是用你已经在写脚本的语言来学。
  • 几乎整条路径都用 Lua。每种数据结构、排序、图算法、递归挑战和面试题包都用 Lua 讲授。有三门课用其他语言讲授,列在步骤之后,各附链接:动态规划和 Python 面试系列用 Python,位运算用 C++。留在 Lua 中的一切都由表构成,从第一个栈到最后一道面试题。
  • 像面试一样评分。每节课都以一道 Lua 挑战结束,由测试用例检查。没通过时,Bugsy 会阅读你的代码,引导你找到修复方法,而不是直接给出答案。大多数课程提供免费证书,每张证书都可以通过专属 URL 验证。

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

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

用来学习的话,出乎意料地合适:只能用表来构建,每种结构都清清楚楚,代码也很简短。问题在于表会默默容忍错误:按惯例数组从 1 开始,访问不存在的键会返回 nil 而不是报错,而长度运算符 #t 只在没有 nil 空洞的序列上才可靠。很少有面试用 Lua 进行,所以如果你的目标是面试,面试题包也提供你面试时会用的语言版本。

如何用 Lua 的表实现栈和队列?

栈就是从一端使用的数组部分:table.insert(t, x) 入栈,table.remove(t) 出栈。队列需要更小心,因为 table.remove(t, 1) 会把剩下的每个元素都往前移一位,所以每次出队都是 O(n)。改为维护两个索引 first 和 last:在 last + 1 处添加,从 first 处读取,把那个位置设为 nil 再前移,出队就变成了常数时间。第一步会让你把两者都实现一遍。

为什么 Lua 的 #t 有时会给出错误的长度?

因为 # 返回的是表的一个边界:某个索引 n,满足 t[n] 不是 nil 而 t[n + 1] 是。一个正常的序列只有一个边界,也就是它的长度;如果在中间放一个 nil,就可能有多个边界,而 # 可能返回其中任何一个。所以永远不要在用 # 计算长度的数组中存放 nil;在有空洞的结构中,比如用两个索引实现的队列,要自己记录大小。

数据结构对 Roblox 脚本开发重要吗?

重要,一旦游戏中的对象多起来就是如此。背包是哈希表,出生或回合顺序是队列,冷却时间列表可以用优先队列,在地图上寻路就是图搜索。Roblox 脚本使用的语言 Luau 源自 Lua 5.1,保留了它的表、从 1 开始的数组和 # 运算符,所以你在这里实现的东西可以直接用过去。

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

有三门:动态规划和 Python 面试系列用 Python 讲授,位运算用 C++ 讲授。它们列在步骤之后,每门都附有链接,会以对应的语言打开。在 Lua 中,备忘录就是一个表;位运算符直到 Lua 5.3 才加入,它拥有 C++ 的 &、|、<< 和 >>,而异或和按位取反都写作 ~。

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

至少要了解表、函数、循环和局部变量;如果你希望结构像对象一样使用,元表会有帮助。如果这些对你来说还很陌生,可以先学 Coddy 免费的 Lua 课程,学完后再从这条路径继续。

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

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

其他学习路径

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

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

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

开始学习