Menu
CoddyTech
Lộ trình học

Cấu trúc dữ liệu và thuật toán với Lua

Lua chỉ có một cấu trúc dữ liệu là table, nên mọi cấu trúc trên lộ trình này đều được tạo từ nó: stack từ phần mảng, hàng đợi với hai chỉ số, cây từ các table trỏ tới table khác. Lộ trình này cho bạn tự xây từng cấu trúc bằng Lua, rồi dùng chúng để sắp xếp, đệ quy và duyệt đồ thị, và kết thúc bằng các bài phỏng vấn được chấm điểm. Miễn phí, ngay trên trình duyệt, kèm chứng nhận ở hầu hết khóa học.

377 bài học284 thử thách702 câu hỏi trắc nghiệm

DSA với Lua, từng bước một

38 khóa học377 bài học284 thử thách702 câu hỏi trắc nghiệm

Mỗi bước là một nhóm khóa học có sẵn trên Coddy, và mọi nút "Bắt đầu" đều mở chúng bằng Lua. Ba khóa học chưa được dạy bằng Lua được liệt kê sau các bước.

  1. 1
    Bắt đầu bước nàyBắt đầuStack, hàng đợi, cây nhị phân, bảng băm và danh sách liên kết, mỗi cấu trúc được xây từ đầu bằng Lua rồi dùng để giải bài. Table trong Lua vốn đã là một bảng băm, nên bước này cho bạn thấy nó làm gì cho mình, và cách nắn nó thành bốn cấu trúc còn lại.Bắt đầu
  2. 2
    Bắt đầu bước nàyBắt đầuDanh sách liên kết đôi, heap và hàng đợi ưu tiên, trie, đồ thị và cây AVL tự cân bằng. Trong Lua, một nút trie đơn giản là table có khóa là ký tự tiếp theo, còn đồ thị là table chứa danh sách kề, nên mỗi cấu trúc chỉ phức tạp đúng bằng ý tưởng của nó.Bắt đầu
  3. 3
    Bắt đầu bước nàyBắt đầuBubble sort, selection sort, insertion sort, merge sort, quick sort, heap sort, counting sort và radix sort, viết bằng Lua và xem trong công cụ trực quan hóa. table.sort không ổn định, như tài liệu tham khảo của Lua đã ghi rõ; sau bước này, bạn hiểu vì sao một thuật toán sắp xếp đánh đổi tính ổn định, và cách một chỉ số phụ để phân định bằng nhau lấy lại nó.Bắt đầu
  4. 4
    Bắt đầu bước nàyBắt đầuThử thách đệ quy bằng Lua, ngôn ngữ có tail call đúng nghĩa: với lời gọi ở vị trí đuôi, return f(x), hàm được gọi dùng lại ô stack của hàm gọi, nên một vòng lặp đệ quy đuôi không bao giờ làm stack lớn thêm. Đệ quy sâu thông thường vẫn kết thúc bằng tràn stack. Quy hoạch động và thao tác bit được liệt kê sau các bước, vì chúng được dạy bằng Python và C++.Bắt đầuTrang riêng
  5. 5
    Bắt đầu bước nàyBắt đầuTìm kiếm theo chiều rộng và theo chiều sâu, Dijkstra, Bellman-Ford, sắp xếp tô pô, Kruskal và Prim bằng Lua, trên đồ thị bạn đã xây ở bước hai. Lua không có hàng đợi ưu tiên, nên heap từ bước hai chính là thứ Dijkstra cần, và tìm kiếm theo chiều rộng cần một hàng đợi không bao giờ gọi table.remove(t, 1).Bắt đầu
  6. 6
Bạn nhận được gì
Mọi thứ bạn sẽ dùng để học lập trình

Học qua thực hành

Viết code thật, truy vấn cơ sở dữ liệu, xây dựng trang web và làm chủ prompt AI. Các bài học tương tác bao quát mọi kỹ năng mà lập trình viên hiện đại cần.

playground.js
Trình chỉnh sửa code
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
Test #1test Case Success icon
Test #2test Case Success icon
Test #3test Case Failure icon
Đầu vào
"Alex"
Đầu ra
"Hello, Coddy! Alex"

Xây dựng streak

Học đều đặn và nhìn tiến độ của bạn lớn dần! Theo dõi thói quen code mỗi ngày, bảo vệ streak bằng ngày đóng băng và nhận phần thưởng khi học mỗi ngày.

12 ngày streak

Quay lại ngày mai để giữ streak!

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

Gấp đôi hoặc mất hết

Ngày 5/7

fire Freeze icon

Đóng băng streak

2 left

Code ở mọi nơi

Mang hành trình lập trình theo bên mình! Không cài đặt, không tải về: chỉ cần mở ra và bắt đầu code. Có trên iOS, Android và Web với đánh giá 4,9 sao.

Python
7Streak
250Điểm
5Năng lượng
Biến
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
Tiếp tục
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
Hành trình
Mục tiêu
Bảng xếp hạng
Hồ sơ
4.9
Ngôi saoNgôi saoNgôi saoNgôi saoNgôi sao
Đánh giá

Bạn không đơn độc

Thi đấu trên bảng xếp hạng toàn cầu, mời bạn bè để nhận phần thưởng và cùng nhau ăn mừng thành công. Học code cùng bạn bè vui hơn nhiều!

Giải đấu Challenger
Giải đấu ChallengerTop 7 được thăng hạng
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 iconVùng thăng hạngleaderboard Arrow Up icon

Mọi cách để học

Đọc, nghe, tự kiểm tra, hỏi AI hoặc tra cứu bất cứ điều gì bạn đã học. Mỗi bài học phù hợp với trình độ của bạn.

Giới thiệu về biến
Âm thanh

Biến là một vùng chứa có tên, lưu một giá trị mà bạn có thể dùng lại sau trong chương trình.

Trong Python, bạn tạo biến bằng cách viết tên, dấu bằng, rồi giá trị muốn lưu.

Giá trị có thể thay đổi theo thời gian. Gán lại tên đó chỉ đơn giản là trỏ nó tới một giá trị mới.

1xSarah

Nhận chứng nhận

Nhận chứng nhận cho mỗi khóa học bạn hoàn thành. Thêm vào hồ sơ LinkedIn và CV để cho nhà tuyển dụng thấy kỹ năng lập trình của bạn.

CoddyGiấy chứng nhận hoàn thành
Chứng nhận rằngNguyễn Văn Anđã hoàn thành xuất sắc
python iconPython cơ bản
Đã xác minh
NgàyTh1 2026
LinkedInThêm vào LinkedIn

Vì sao nên học DSA với Lua trên Coddy

  • Một cấu trúc, mọi cấu trúc. Table trong Lua gồm cả phần mảng và phần băm, và ngoài nó ra không có gì dựng sẵn: không có kiểu list, tập hợp, hàng đợi hay heap. Trong Lua, mọi cấu trúc đều là các table trỏ tới table, và đó là cách nhìn rõ ràng nhất về bản chất của danh sách liên kết hay cây.
  • Cho Roblox, game và plugin. Lua chạy Roblox (dưới dạng Luau), script game, cấu hình Neovim và script Redis, và code game chính là code cấu trúc dữ liệu: túi đồ là bảng băm, thứ tự lượt chơi là hàng đợi, tìm đường là tìm kiếm trên đồ thị. Học các cấu trúc bằng Lua nghĩa là học chúng bằng chính ngôn ngữ bạn đang viết script.
  • Gần như cả lộ trình bằng Lua. Mọi cấu trúc dữ liệu, thuật toán sắp xếp, thuật toán đồ thị, thử thách đệ quy và gói phỏng vấn đều được dạy bằng Lua. Ba khóa được dạy bằng ngôn ngữ khác và được liệt kê sau các bước, kèm đường dẫn đến từng khóa: quy hoạch động và chuỗi phỏng vấn Python bằng Python, thao tác bit bằng C++. Mọi thứ còn lại bằng Lua đều được làm từ table, từ stack đầu tiên đến bài phỏng vấn cuối cùng.
  • Chấm điểm như một buổi phỏng vấn. Bài học nào cũng kết thúc bằng một thử thách Lua được kiểm tra bằng test case, và khi một test case không qua, Bugsy đọc code của bạn và gợi hướng sửa mà không đưa luôn đáp án. Chứng nhận miễn phí ở hầu hết khóa học, mỗi chứng nhận đều xác minh được tại URL riêng.

Câu hỏi thường gặp về DSA với Lua

Lua có phù hợp để học cấu trúc dữ liệu và thuật toán không?

Để học thì tốt đến bất ngờ: chỉ có table để xây, nên mọi cấu trúc đều tường minh và code luôn ngắn. Điểm cần lưu ý là table bỏ qua lỗi một cách lặng lẽ: theo quy ước mảng bắt đầu từ 1, khóa không tồn tại trả về nil thay vì báo lỗi, và toán tử độ dài #t chỉ đáng tin trên một dãy không có lỗ nil. Ít buổi phỏng vấn dùng Lua, nên nếu mục tiêu của bạn là phỏng vấn, các gói phỏng vấn cũng có bằng ngôn ngữ bạn sẽ dùng ở đó.

Làm sao xây stack và hàng đợi từ một table trong Lua?

Stack là phần mảng được dùng từ một đầu: table.insert(t, x) để đẩy vào và table.remove(t) để lấy ra. Hàng đợi cần cẩn thận hơn, vì table.remove(t, 1) dời mọi phần tử còn lại xuống một vị trí, nên mỗi lần lấy ra tốn O(n). Thay vào đó, hãy giữ hai chỉ số first và last: thêm vào ở last + 1, đọc ở first, gán ô đó thành nil rồi tăng chỉ số, và việc lấy ra trở thành thời gian hằng số. Bước một cho bạn xây cả hai.

Vì sao #t trong Lua đôi khi cho độ dài sai?

Vì # trả về một biên của table: một chỉ số n mà t[n] khác nil còn t[n + 1] thì không. Một dãy đúng nghĩa chỉ có đúng một biên, chính là độ dài của nó; đặt một nil vào giữa thì có thể có nhiều biên, và # có thể trả về bất kỳ biên nào. Vì vậy, đừng bao giờ lưu nil trong một mảng bạn đo bằng #, và với các cấu trúc có khoảng trống, như hàng đợi hai chỉ số, hãy tự theo dõi kích thước.

Cấu trúc dữ liệu có quan trọng khi viết script Roblox không?

Có, khi game lớn dần lên quá vài đối tượng. Túi đồ là bảng băm, thứ tự xuất hiện hay thứ tự lượt chơi là hàng đợi, danh sách thời gian hồi chiêu có thể là hàng đợi ưu tiên, và tìm đường trên bản đồ là tìm kiếm trên đồ thị. Luau, ngôn ngữ dùng để viết script Roblox, bắt nguồn từ Lua 5.1 và giữ nguyên table, mảng bắt đầu từ 1 và toán tử #, nên những gì bạn xây ở đây dùng được ngay.

Khóa học nào trong lộ trình không được dạy bằng Lua?

Ba khóa: quy hoạch động và chuỗi phỏng vấn Python, dạy bằng Python, và thao tác bit, dạy bằng C++. Chúng được liệt kê sau các bước, mỗi khóa có đường dẫn mở bằng chính ngôn ngữ của nó. Bảng ghi nhớ trong Lua là một table; toán tử bit chỉ xuất hiện từ Lua 5.3, có &, |, << và >> như C++ và viết cả XOR lẫn NOT là ~.

Có cần biết Lua trước khi bắt đầu lộ trình này không?

Ít nhất là table, hàm, vòng lặp và biến cục bộ; metatable thì có ích nếu bạn muốn các cấu trúc hoạt động như đối tượng. Nếu những thứ đó còn mới với bạn, khóa học Lua của Coddy sẽ dạy chúng trước, miễn phí, và lộ trình này tiếp nối từ chỗ khóa học đó kết thúc.

Tôi có nhận được chứng nhận cho lộ trình Cấu trúc dữ liệu & thuật toán không?

Có. Hoàn thành mọi bước và bạn nhận một chứng nhận miễn phí cho cả lộ trình Cấu trúc dữ liệu & thuật toán. Chứng nhận liệt kê từng khóa học bạn đã hoàn thành trên đường đi và liên kết đến chứng nhận riêng của từng khóa, để ai cũng có thể kiểm tra mọi kỹ năng được nêu. Bạn có thể thêm nó vào hồ sơ LinkedIn. Đây là chứng nhận hoàn thành của Coddy, không phải văn bằng được kiểm định.

Các lộ trình học khác

Cùng các khóa học, sắp xếp cho một vai trò khác. Tiến độ được giữ lại: khóa học đã hoàn thành ở một lộ trình được tính ở mọi lộ trình có khóa học đó.

Tất cả lộ trình học
Hình minh họa các ngôn ngữ lập trình của Coddy

Bắt đầu lộ trình Cấu trúc dữ liệu & thuật toán miễn phí

Bắt đầu học