Menu
CoddyTech
Lộ trình học

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

Thư viện chuẩn của Rust có hầu hết các cấu trúc (Vec, VecDeque, HashMap, BTreeMap, BinaryHeap), còn borrow checker thì có ý kiến riêng về những cấu trúc bạn tự viết: danh sách liên kết đơn là Option<Box<Node>>, và cây có liên kết tới nút cha cần đến Rc, RefCell và Weak. Lộ trình này cho bạn tự xây từng cấu trúc bằng Rust, 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 Rust, 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 Rust. Ba khóa học chưa được dạy bằng Rust đượ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 Rust rồi dùng để giải bài. Trong Rust, một nút sở hữu nút tiếp theo là Option<Box<Node>>, nên đây là lúc ownership bắt đầu trở nên tự nhiên, và học xong bạn biết Vec, VecDeque và HashMap làm gì cho mình.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. Danh sách liên kết đôi là cấu trúc khó nhất trong Rust, vì có hai liên kết dẫn tới mỗi nút; sau bước này, BinaryHeap là heap bạn đã tự viết, mặc định lấy phần tử lớn nhất trước, và BTreeMap là cây có thứ tự bạn hiểu rõ.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 Rust và xem trong công cụ trực quan hóa. sort ổn định còn sort_unstable thường nhanh hơn; sau bước này, bạn nói được tính ổn định tốn bao nhiêu và khi nào nên bỏ nó.Bắt đầu
  4. 4
    Bắt đầu bước nàyBắt đầuThử thách đệ quy bằng Rust. Một kiểu đệ quy cần Box thì trình biên dịch mới xác định được kích thước, và một hàm đệ quy trên kiểu đó so khớp từng trường hợp, Some hoặc None, đúng như cách chia trường hợp cơ sở và trường hợp đệ quy. Rust không cam kết tối ưu tail call, nên đệ quy đủ sâu sẽ tràn stack và dừng chương trình. 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
  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 Rust trên Coddy

  • Ownership ở nơi khó nhất. Danh sách liên kết và cây là chỗ các quy tắc của Rust làm bạn vấp đầu tiên: mỗi giá trị chỉ có một chủ sở hữu, trong khi các cấu trúc này lại muốn các nút trỏ lẫn nhau. Viết chúng là lúc Box, Option::take, Rc<RefCell<T>> và Weak thôi là cú pháp và trở thành những quyết định, cũng là lý do một hướng dẫn nổi tiếng về ngôn ngữ này mang tên Learning Rust With Entirely Too Many Linked Lists.
  • Collection với chi phí rõ ràng. Vec<T> là stack của bạn, VecDeque<T> là bộ đệm vòng và cũng là hàng đợi, HashMap là bảng băm được gieo hạt để chống va chạm cố ý, BTreeMap là B-tree có thứ tự và BinaryHeap<T> là max-heap. Tự xây các cấu trúc một lần, bạn sẽ biết bài toán nào cần cấu trúc nào, và vì sao Dijkstra bọc các phần tử trong Reverse.
  • Gần như cả lộ trình bằng Rust. 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 Rust. 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++. Thao tác bit chuyển sang chỉ với một khác biệt về cách viết: Rust viết phép NOT là !x, và đếm số bit bật bằng count_ones().
  • 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 Rust được kiểm tra bằng test case, và khi một test case không qua hoặc code không biên dịch được, 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 Rust

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

Để dùng chúng thì rất phù hợp: các collection chuẩn chạy nhanh và có tài liệu tốt, sort ổn định, và Rust an toàn loại bỏ con trỏ treo và data race ngay lúc biên dịch, không cần bộ thu gom rác. Để viết các cấu trúc dựa trên con trỏ thì khó hơn C hay Java, vì ownership không cho phép các liên kết vừa dùng chung vừa thay đổi được trừ khi bạn chủ động dùng Rc và RefCell, mà danh sách liên kết đôi hay cây có con trỏ tới nút cha lại được tạo nên từ đúng những thứ đó. Cái khó ấy cũng chính là bài học: khi đã viết được chúng bằng Rust, bạn biết chính xác ai sở hữu cái gì.

Collection nào của Rust tương ứng với cấu trúc dữ liệu nào?

Vec<T> là mảng động và là stack của bạn, VecDeque<T> là bộ đệm vòng và là hàng đợi, HashMap và HashSet là bảng băm (mặc định dùng SipHash, chống được va chạm cố ý nhưng đổi lại chậm hơn một chút), BTreeMap và BTreeSet là B-tree có thứ tự, BinaryHeap<T> là max-heap, còn LinkedList<T> là danh sách liên kết đôi mà bạn hiếm khi muốn dùng thay cho Vec hay VecDeque. Không có kiểu trie hay đồ thị; những thứ đó bạn tự xây.

Vì sao viết danh sách liên kết trong Rust lại khó đến vậy?

Vì mỗi giá trị có đúng một chủ sở hữu. Danh sách liên kết đơn hợp với quy tắc đó: mỗi nút sở hữu nút tiếp theo qua Option<Box<Node>>. Danh sách liên kết đôi hay cây có liên kết tới nút cha thì không, vì có hai con trỏ dẫn tới mỗi nút, nên bạn phải dùng Rc<RefCell<Node>> với Weak cho các liên kết ngược, hoặc giữ các nút trong một Vec và liên kết chúng bằng chỉ số. Learning Rust With Entirely Too Many Linked Lists ra đời vì quá nhiều người bị kẹt đúng ở chỗ này.

Làm sao có min-heap trong Rust?

BinaryHeap<T> là max-heap, nên hãy bọc mỗi phần tử trong std::cmp::Reverse: đẩy vào Reverse(x) thì x nhỏ nhất sẽ ra trước. Với Dijkstra, đẩy vào Reverse((distance, node)), và tuple sẽ so sánh theo khoảng cách trước. Khi đã tự viết một heap ở bước hai, việc đảo thứ tự của nó trở nên hiển nhiên.

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

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 Rust là một Vec hoặc HashMap, và tràn số nguyên sẽ panic ở bản build debug, nên một mẹo thao tác bit dựa vào việc quay vòng phải viết rõ bằng wrapping_add hoặc wrapping_mul.

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

Ít nhất là ownership, borrowing, struct, enum và Option; Box và trait thì có ích. Nếu những thứ đó còn mới với bạn, khóa học Rust của Coddy sẽ đưa bạn đến đó 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