Các collection generic của C# đã chứa phần lớn lộ trình này: Stack<T>, Queue<T>, Dictionary<TKey,TValue>, LinkedList<T> và SortedSet<T> là stack, queue, bảng băm, danh sách liên kết đôi và cây tìm kiếm cân bằng. Tự xây từng cấu trúc bằng C#, rồi dùng chúng để sắp xếp, đệ quy và tìm kiếm trên đồ 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, phần lớn khóa học có chứng nhận.
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 C#. Ba khóa học chưa dạy bằng C# được liệt kê sau các bước.
1
Bước 1
Chuỗi cấu trúc dữ liệu, phần một
Bắt đầu bước nàyBắt đầuStack, queue, 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ừ con số 0 bằng C# rồi dùng để giải bài toán. Sau bước này, Stack<T>, Queue<T> và Dictionary<TKey,TValue> là những cấu trúc bạn đã tự viết, và bạn biết mỗi lời gọi của chúng tốn kém thế nào.Bắt đầu
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. LinkedList<T> là cấu trúc đầu tiên trong số đó, có sẵn; sau bước này, SortedSet<T> là một cây cân bằng bạn hiểu rõ, cây đỏ đen trong khi cây của bạn là AVL, và heap là thứ bạn tự viết được trên mọi phiên bản .NET.Bắt đầu
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 C# và quan sát trong công cụ trực quan hóa. Array.Sort và List<T>.Sort là introsort, tức quicksort có heapsort và insertion sort hỗ trợ, và không ổn định, còn OrderBy của LINQ thì ổn định; sau bước này bạn sẽ hiểu vì sao.Bắt đầu
Bắt đầu bước nàyBắt đầuThử thách đệ quy bằng C#, được chấm bằng test case như mọi bài học. Trong .NET, một lời gọi đệ quy không bao giờ chạm đến trường hợp cơ sở sẽ kết thúc bằng StackOverflowException, ngoại lệ không thể bắt được, nên mọi phương thức đệ quy cần có lối thoát trước mọi thứ khác. 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êng15 bài học15 thử thách
5
Bước 5
Thuật toán đồ thị
Bắt đầu bước nàyBắt đầuTìm kiếm theo chiều rộng và chiều sâu, Dijkstra, Bellman-Ford, sắp xếp topo, Kruskal và Prim bằng C#, trên đồ thị bạn đã xây ở bước hai. Dijkstra cần một hàng đợi ưu tiên, mà C# chỉ có từ .NET 6, nên heap từ bước hai là thứ bạn cần nắm.Bắt đầu
Bắt đầu bước nàyBắt đầuMười bộ thử thách phỏng vấn và hai ngân hàng bài tập lập trình bằng C#, được chấm bằng test case: những bài toán lạ, giải mà không có hướng dẫn, với các collection bạn giờ đã giải thích được và các cấu trúc bạn đã tự viết.Bắt đầu
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) {
3return greeting +" "+ name
4}
5
Test #1
Test #2
Test #3
Đầ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!
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
Gấp đôi hoặc mất hết
Ngày 5/7
Đó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.
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 ChallengerTop 7 được thăng hạng
1
Alex7+ Days
2840
2
Jordan7+ Days
2650
3
Sam7+ Days
2420
4
Casey
2180
5
Morgan7+ Days
1950
Vùng thăng hạng
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.
Giấ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 cơ bản
NgàyTh1 2026
Thêm vào LinkedIn
Vì sao nên học DSA bằng C# trên Coddy
Biết mỗi collection tốn kém thế nào. List<T> là mảng động, nên Insert(0, x) dịch chuyển mọi phần tử phía sau; Dictionary<TKey,TValue> là bảng băm, trung bình có thời gian hằng số và chỉ tốt bằng GetHashCode của các khóa. Tự xây các cấu trúc là cách để những điều đó không còn là kiến thức vụn vặt mà trở thành căn cứ để bạn chọn collection.
Ngôn ngữ của Unity và .NET. C# là ngôn ngữ viết script cho game Unity, và rất nhiều phần mềm doanh nghiệp chạy trên .NET; cả hai đều dựa vào cùng những cấu trúc này. Bản đồ ô là một đồ thị, tìm đường là tìm kiếm trên đồ thị, còn thứ tự lượt chơi hay lịch sự kiện là một hàng đợi ưu tiên, nên thuật toán và codebase dùng chung một ngôn ngữ.
Gần như toàn bộ lộ trình bằng C#. 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à bộ bài phỏng vấn đều được dạy bằng C#. Ba khóa được dạy bằng ngôn ngữ khác và liệt kê sau các bước, kèm liên kết đến từng khóa: quy hoạch động và chuỗi bài phỏng vấn Python bằng Python, thao tác bit bằng C++. Thao tác bit là khóa dễ theo nhất từ C#, vì C# viết các toán tử bit của C++ bằng đúng những ký hiệu đó.
Chấm điểm như một buổi phỏng vấn. Mọi bài học đều kết thúc bằng một thử thách C# được kiểm tra bằng test case, và khi một test thất bại, Bugsy đọc code của bạn và gợi hướng cho bạn tự sửa mà không đưa luôn đáp án. Phần lớn khóa học có chứng nhận miễn phí, mỗi chứng nhận xác minh được tại URL riêng.
Câu hỏi thường gặp về DSA bằng C#
C# có tốt cho cấu trúc dữ liệu và giải thuật không?
Có. C# đọc khá giống Java: kiểu dữ liệu làm rõ từng node, tham chiếu và tham số generic, và System.Collections.Generic bao quát phần lớn các cấu trúc trong lộ trình này. Có hai thói quen nên tập sớm. LINQ ngắn gọn, nhưng mỗi OrderBy là một lần sắp xếp và mỗi Where là một vòng lặp, nên nó che đi những chi phí bạn đang học cách đếm; và Array.Sort không ổn định, điều này quan trọng mỗi khi các khóa bằng nhau phải giữ nguyên thứ tự.
List<T> là mảng động, Stack<T> và Queue<T> dựa trên mảng, LinkedList<T> là danh sách liên kết đôi, Dictionary<TKey,TValue> và HashSet<T> là bảng băm, còn SortedDictionary<TKey,TValue> và SortedSet<T> là cây đỏ đen, cân bằng giống như cây AVL bạn xây ở bước hai. SortedList<TKey,TValue> là một cặp mảng được giữ theo thứ tự khóa, và từ .NET 6, PriorityQueue<TElement,TPriority> là một min-heap dựa trên mảng. Không có lớp cho trie hay đồ thị; những thứ đó bạn tự viết.
Trong C#, node của cây hoặc danh sách nên là class hay struct?
Class. struct là kiểu giá trị: nó hoàn toàn không thể chứa một trường có kiểu của chính nó, và ở bất cứ đâu nó bị sao chép, thay đổi trên bản sao không ảnh hưởng đến bản gốc. Một instance của class là một tham chiếu, nên các node có thể trỏ đến nhau như danh sách liên kết hay cây cần. Hãy dùng struct cho những giá trị nhỏ, như một tọa độ lưới hay một cạnh có trọng số.
C# có hàng đợi ưu tiên không?
Từ .NET 6 thì có: PriorityQueue<TElement,TPriority>, một min-heap dựa trên mảng, trong đó mỗi phần tử được đưa vào hàng đợi cùng độ ưu tiên riêng của nó; truyền vào một IComparer<TPriority> đảo ngược thứ tự để có max-heap. .NET Framework và các runtime cũ hơn không có, đó là lý do lập trình viên C# từ lâu đã tự viết heap hoặc biến một SortedSet<T> thành heap, và vì sao biết tự viết heap vẫn quan trọng. Bước hai là nơi bạn làm điều đó.
Những khóa học nào trong lộ trình này không dạy bằng C#?
Ba khóa: quy hoạch động và chuỗi bà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ó một liên kết mở nó bằng ngôn ngữ của riêng nó. Bảng ghi nhớ trong C# là một mảng hoặc một Dictionary, và các mẹo bit chuyển sang gọn gàng, đến cả điểm khác biệt mà C++ cũng có: >> giữ dấu với int và điền số 0 với uint.
Có cần biết C# trước khi bắt đầu lộ trình này không?
Ít nhất là lớp, phương thức, mảng, vòng lặp và các collection generic như List<T>. Nếu những thứ đó còn mới, khóa học C# của Coddy đưa bạn đến đó trước, miễn phí, và lộ trình này tiếp nối ngay 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 đó.