C# 数据结构与算法
C# 的泛型集合已经包含了这条路径的大部分内容:Stack<T>、Queue<T>、Dictionary<TKey,TValue>、LinkedList<T> 和 SortedSet<T> 分别是栈、队列、哈希表、双向链表和平衡搜索树。用 C# 亲手实现每一种数据结构,再用它们来排序、递归和搜索图,最后完成自动评分的面试题。免费,在浏览器中学习,大多数课程都有证书。
377 节课284 个挑战702 道测验题
- 适合初学者
AI 辅助编程帮助
动手实践的互动课程
每节课都有语音讲解
检验所学的测验
终点有一张路径证书,沿途还有 23 张
C# 数据结构与算法,一步一步来
每一步都是 Coddy 上现有的一组课程,每个“开始”按钮都会用 C# 打开它们。暂时还不是用 C# 教的三门课程列在步骤之后。
- 1
- 2
- 3
- 4
- 5
- 6
在实践中学习
编写真实代码、查询数据库、搭建网站、掌握 AI 提示词。我们的互动课程涵盖现代开发者需要的每一项技能。
打造你的连胜
坚持下去,看着自己不断进步!记录每天的编程习惯,用冻结天数保护连胜,每天打卡都能赢取奖励。
12 天连胜
明天再来,保持你的连胜!
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
加倍或归零
第 5 天,共 7 天
连胜冻结
2 left
随时随地写代码
随时随地继续你的编程学习旅程!无需配置,无需下载:打开就能写代码。支持 iOS、Android 和 Web,评分高达 4.9 星。
你并不孤单
在全球排行榜上一较高下,邀请好友赢取奖励,为彼此的成就喝彩。和好友一起编程更有趣!
多种学习方式
阅读、收听、自我测验、问 AI,或者查阅学过的任何内容。每节课都配合你的节奏。
变量是一个有名字的容器,用来存储值,方便你在程序后面引用。
在 Python 中,创建变量只需写下名字、一个等号,再写上要存储的值。
值可以随时间变化。给这个名字重新赋值,它就会指向新的值。
获得证书
每完成一门课程都能获得证书。把证书添加到你的 LinkedIn 个人资料和简历中,向雇主展示你的编程能力。
为什么在 Coddy 用 C# 学数据结构与算法
- 清楚每种集合的开销。
List<T>是动态数组,所以Insert(0, x)会把后面的每个元素都往后挪;Dictionary<TKey,TValue>是哈希表,平均是常数时间,但效果取决于键的GetHashCode写得好不好。亲手实现这些数据结构之后,这些知识就不再是冷知识,而会直接决定你选用哪种集合。 - Unity 和 .NET 的语言。C# 是 Unity 游戏的脚本语言,大量企业软件也运行在 .NET 上;两者都离不开同样的数据结构。瓦片地图就是图,寻路就是图搜索,回合顺序或事件调度就是优先队列,所以算法和代码库用的是同一门语言。
- 几乎整条路径都用 C#。所有数据结构、排序、图算法、递归挑战和面试题包都用 C# 教学。另外三门用其他语言教,列在步骤之后,每门都附有链接:动态规划和 Python 面试系列用 Python,位运算用 C++。三门中位运算最容易从 C# 衔接过去,因为 C# 的位运算符和 C++ 用的是同样的符号。
- 像面试一样评分。每节课都以一个由测试用例检查的 C# 挑战结束;没通过时,Bugsy 会读你的代码,引导你找到修复方法,而不是直接给出答案。大多数课程都有免费证书,每张都有自己的验证网址。
C# 数据结构与算法常见问题
C# 适合学数据结构与算法吗?
System.Collections.Generic 涵盖了这条路径上的大部分数据结构。有两个习惯值得尽早养成。LINQ 写起来简洁,但每个 OrderBy 都是一次排序,每个 Where 都是一个循环,它会把你正在学着计算的开销藏起来;另外,Array.Sort 是不稳定排序,只要相等的键必须保持原有顺序,这一点就很重要。.NET 集合分别对应哪些数据结构?
List<T> 是动态数组;Stack<T> 和 Queue<T> 基于数组实现;LinkedList<T> 是双向链表;Dictionary<TKey,TValue> 和 HashSet<T> 是哈希表;SortedDictionary<TKey,TValue> 和 SortedSet<T> 是红黑树,和你在第二步实现的 AVL 树一样是平衡树。SortedList<TKey,TValue> 是一对按键排序的数组;从 .NET 6 开始,PriorityQueue<TElement,TPriority> 是基于数组的小顶堆。没有字典树或图的类,这些要你自己写。在 C# 中,树或链表的节点应该用 class 还是 struct?
struct 是值类型:它根本不能包含自身类型的字段,而且无论在哪里被复制,修改副本都不会影响原值。class 实例是引用,所以节点之间可以像链表或树需要的那样相互指向。struct 留给小的值,比如网格坐标或带权的边。C# 有优先队列吗?
PriorityQueue<TElement,TPriority>,一个基于数组的小顶堆,每个元素入队时都带着自己的优先级;传入一个反转顺序的 IComparer<TPriority>,就能得到大顶堆。.NET Framework 和更早的运行时没有优先队列,所以 C# 开发者长期以来都是自己写堆,或者把 SortedSet<T> 硬改成堆来用,这也是为什么能自己写一个堆至今仍然重要。第二步就会让你动手写。这条路径上哪些课程不是用 C# 教的?
Dictionary,位运算技巧也能顺利移植,连 C++ 中的那个区别也一样:>> 作用于 int 时保留符号位,作用于 uint 时用 0 填充。开始这条路径之前需要会 C# 吗?
List<T> 这样的泛型集合。如果这些还没学过,Coddy 的 C# 课程会先带你学会,而且免费,这条路径就从它结束的地方接着往下走。完成数据结构与算法路径能获得证书吗?
能。完成每一步,你就能获得整条数据结构与算法路径的一张免费证书。证书会列出你沿途完成的每门课程,并链接到每门课程各自的证书,任何人都能核实上面列出的每项技能。你可以把它添加到 LinkedIn 个人资料。这是 Coddy 颁发的结业证书,不是经过认证的学历资格。