Logo
☆☆☆☆☆
0.0
Beginner
35h

C# 编程面试中的数据结构

数据结构是计算机科学中最基本的概念之一。它们往往是开发高效程序时的核心决策因素。因此,在行业面试中,数据结构也常被视为衡量计算机科学知识水平的重要标准。 本课程详细回顾了所有常见的数据结构,并提供了用 C# 实现的底层细节,帮助读者全面掌握各种数据结构,从而能够更有效地运用它们来编写高质量代码!

10 Lessons
Included in Subscription Plan
Personalized Learning
Powered by AI
C# 编程面试中的数据结构
数据结构是计算机科学中最基本的概念之一。它们往往是开发高效程序时的核心决策因素。因此,在行业面试中,数据结构也常被视为衡量计算机科学知识水平的重要标准。 本课程详细回顾了所有常见的数据结构,并提供了用 C# 实现的底层细节,帮助读者全面掌握各种数据结构,从而能够更有效地运用它们来编写高质量代码!

Content

10 Lessons • 0 Quizzes • 0 Challenges

复杂度度量简介
  1. 1

    比较算法

  2. 2

    示例 1:测量单循环算法的时间复杂度

  3. 3

    示例 2:包含嵌套循环的算法的时间复杂度

  4. 4

    渐近分析与大O表示法简介

  5. 5

    其他常见的渐近符号及其为何大O符号占据主导地位

  6. 6

    实用公式

  7. 7

    常见的时间复杂度情况

  8. 8

    挑战 1:包含加法的嵌套循环的 Big (O) 表示

  9. 9

    解题回顾:嵌套循环加法的时间复杂度(Big O)

  10. 10

    挑战 2:包含减法的嵌套循环的 Big (O) 表示

  11. 11

    解决方案回顾:嵌套循环中带减法操作的时间复杂度

  12. 12

    挑战 3:包含乘法的嵌套循环的 Big (O) 表示法

  13. 13

    解决方案回顾:嵌套循环与乘法的时间复杂度(Big O)

  14. 14

    挑战 4:嵌套循环与乘法(基础)

  15. 15

    解决方案回顾:嵌套循环与乘法(基础)

  16. 16

    挑战 5:嵌套循环与乘法(中级)

  17. 17

    解决方案回顾:嵌套循环与乘法(中级)

  18. 18

    挑战6:嵌套循环与乘法(进阶)

  19. 19

    解决方案回顾:嵌套循环与乘法(进阶)

  20. 20

    挑战 7:嵌套循环与乘法(专业版)

  21. 21

    解决方案回顾:嵌套循环与乘法(专业版)

  22. 22

    复杂度测验:检验你对复杂度的理解

数组简介
  1. 1

    什么是数组?

  2. 2

    多维数组

  3. 3

    挑战 1:从数组中移除偶数整数

  4. 4

    解题回顾:从数组中移除偶数整数

  5. 5

    挑战 2:合并两个有序数组

  6. 6

    解题回顾:合并两个有序数组

  7. 7

    挑战3:找出两个相加等于给定值的数

  8. 8

    解题回顾:找出两个相加等于给定值的数

  9. 9

    挑战 4:数组中所有元素的乘积

  10. 10

    解题回顾:数组中所有元素的乘积

  11. 11

    挑战 5:在数组中查找最小值

  12. 12

    解决方案回顾:在数组中查找最小值

  13. 13

    挑战6:在数组中查找第一个唯一整数

  14. 14

    解决方案回顾:在数组中查找第一个唯一整数

  15. 15

    挑战7:在数组中寻找第二大的值

  16. 16

    解决方案回顾:在数组中查找第二大的值

  17. 17

    挑战8:将数组向右旋转一位

  18. 18

    解决方案回顾:将数组向右旋转一位

  19. 19

    挑战 9:重新排列正负数值

  20. 20

    解题回顾:重新排列正负数值

  21. 21

    挑战 10:将已排序数组重新排列为最大/最小形式

  22. 22

    解题回顾:将已排序数组重新排列为最大/最小形式

  23. 23

    挑战 11:最大和子数组

  24. 24

    解决方案回顾:最大子数组和

  25. 25

    数组测验:检验你对数组的理解

链表简介
  1. 1

    单链表(SLL)

  2. 2

    基本链表操作

  3. 3

    单链表插入

  4. 4

    挑战 1:尾部插入

  5. 5

    解决方案回顾:尾部插入

  6. 6

    挑战 2:在单链表中搜索

  7. 7

    解决方案回顾:在单向链表中搜索

  8. 8

    单链表中的删除操作

  9. 9

    挑战 3:按值删除

  10. 10

    解决方案回顾:按值删除

  11. 11

    链表与数组

  12. 12

    挑战 4:查找链表的长度

  13. 13

    解题回顾:查找链表的长度

  14. 14

    挑战 5:反转链表

  15. 15

    解决方案回顾:反转链表

  16. 16

    挑战6:检测链表中的环

  17. 17

    解决方案回顾:检测链表中的环

  18. 18

    挑战7:寻找链表的中间节点

  19. 19

    解题回顾:查找链表的中间节点

  20. 20

    挑战8:从链表中删除重复项

  21. 21

    解题回顾:从链表中删除重复项

  22. 22

    挑战9:链表的并集与交集

  23. 23

    解决方案回顾:链表的并集与交集

  24. 24

    挑战 10:返回倒数第 N 个节点

  25. 25

    解题回顾:返回倒数第 N 个节点

  26. 26

    双向链表(DLL)

  27. 27

    单向链表与双向链表

  28. 28

    链表测验:检验你对链表的理解

栈与队列简介
  1. 1

    栈(LIFO)简介

  2. 2

    栈(实现)

  3. 3

    队列(FIFO)简介

  4. 4

    队列(实现)

  5. 5

    挑战 1:使用队列生成从 1 到 N 的二进制数

  6. 6

    解决方案回顾:使用队列生成从 1 到 N 的二进制数

  7. 7

    挑战 2:使用一个数组实现两个栈

  8. 8

    解决方案回顾:使用一个数组实现两个栈

  9. 9

    挑战 3:反转队列的前 k 个元素

  10. 10

    解决方案回顾:反转队列中前 k 个元素

  11. 11

    挑战4:使用栈实现队列

  12. 12

    解决方案回顾:使用栈实现队列

  13. 13

    挑战 5:对栈中的值进行排序

  14. 14

    解决方案回顾:对栈中的值进行排序

  15. 15

    挑战6:使用栈计算后缀表达式

  16. 16

    解题回顾:使用栈计算后缀表达式

  17. 17

    挑战 7:使用栈寻找下一个更大元素

  18. 18

    解决方案回顾:使用栈寻找下一个更大元素

  19. 19

    挑战8:使用栈检查括号是否匹配

  20. 20

    解题回顾:使用栈检查括号是否平衡

  21. 21

    挑战 9:使用栈实现 min() 函数

  22. 22

    解决方案回顾:使用栈实现 min() 函数

  23. 23

    栈/队列测验:检验你对栈/队列的理解

图论入门
  1. 1

    图的基本概念与结构

  2. 2

    图的类型

  3. 3

    图的表示

  4. 4

    图的实现

  5. 5

    图操作的复杂度

  6. 6

    什么是二分图?

  7. 7

    图遍历算法

  8. 8

    挑战 1:实现广度优先搜索

  9. 9

    解决方案回顾:实现广度优先搜索

  10. 10

    挑战 2:实现深度优先搜索

  11. 11

    解决方案回顾:实现深度优先搜索

  12. 12

    挑战 3:检测图中的环

  13. 13

    解决方案回顾:检测图中的环

  14. 14

    挑战4:在图中找到一个“母顶点”

  15. 15

    解题回顾:在图中寻找“母顶点”

  16. 16

    挑战 5:计算无向图中的边数

  17. 17

    解决方案回顾:计算无向图中的边数

  18. 18

    挑战6:检查两点之间是否存在路径

  19. 19

    解决方案回顾:检查两点之间是否存在路径

  20. 20

    挑战 7:判断一个无向图是否为树

  21. 21

    解决方案回顾:判断一个无向图是否为树

  22. 22

    挑战8:查找两个顶点之间的最短路径

  23. 23

    解决方案回顾:查找两个顶点之间的最短路径

  24. 24

    挑战 9:移除边

  25. 25

    解决方案回顾:删除边

  26. 26

    图论测验:检验你对图的理解

树结构简介
  1. 1

    树的基本概念与基本性质介绍

  2. 2

    什么是二叉树?

  3. 3

    什么是平衡树?

  4. 4

    关于完全二叉树的更多内容

  5. 5

    倾斜二叉树

  6. 6

    二叉搜索树(BST)

  7. 7

    在 C# 中实现二叉搜索树

  8. 8

    二叉搜索树插入

  9. 9

    二叉搜索树插入(实现)

  10. 10

    在二叉搜索树中进行搜索(实现)

  11. 11

    二叉搜索树中的删除操作

  12. 12

    二叉搜索树中的删除操作(实现)

  13. 13

    前序遍历

  14. 14

    后序遍历

  15. 15

    中序遍历

  16. 16

    AVL 树

  17. 17

    AVL 插入

  18. 18

    AVL 删除

  19. 19

    红黑树是一种自平衡的二叉搜索树,它通过在每个节点上添加一个存储位来表示颜色(红色或黑色),并遵循一组特定的规则来确保树的平衡。这些规则保证了树的高度始终保持在对数级别,从而使得查找、插入和删除操作的时间复杂度为 O(log n)。 红黑树的主要性质包括: 1. 每个节点要么是红色,要么是黑色。 2. 根节点是黑色。 3. 所有叶子节点(空节点)都是黑色。 4. 如果一个节点是红色,则它的两个子节点都必须是黑色(即不能有两个连续的红色节点)。 5. 从任一节点到其所有后代叶子节点的路径上,黑色节点的数量相同(即每条路径上的黑色节点数量相等)。 这些性质共同作用,确保了红黑树在进行插入和删除操作后仍能保持近似平衡,避免了退化为链表的情况。因此,红黑树广泛应用于需要高效动态数据结构的场景中,例如在标准库中实现关联容器(如 C++ 的 std::map 和 std::set)。

  20. 20

    红黑树插入

  21. 21

    红黑树删除

  22. 22

    2-3 树

  23. 23

    2-3 插入

  24. 24

    2-3 树删除操作(情况 #1)

  25. 25

    2-3 树删除操作(情况 #2)

  26. 26

    2-3-4 树

  27. 27

    树结构概述

  28. 28

    挑战 1:在二叉搜索树中查找最小值

  29. 29

    解决方案回顾:在二叉搜索树中查找最小值

  30. 30

    挑战 2:在二叉搜索树中查找第 k 大的值

  31. 31

    解决方案回顾:在二叉搜索树中查找第 K 大的值

  32. 32

    挑战3:在二叉搜索树中查找指定节点的祖先

  33. 33

    解决方案回顾:在二叉搜索树中查找指定节点的祖先节点

  34. 34

    挑战4:查找二叉树的高度

  35. 35

    解决方案回顾:查找二叉树的高度

  36. 36

    挑战 5:查找距离根节点为“k”的节点

  37. 37

    解答回顾:查找距离根节点为“k”的节点

  38. 38

    树结构测验:检验你对树的理解

Trie
  1. 1

    什么是Trie?

  2. 2

    Trie 的结构

  3. 3

    在字典树中插入

  4. 4

    在字典树中搜索

  5. 5

    Trie 中的删除操作

  6. 6

    挑战 1:Trie 中的总单词数

  7. 7

    解决方案回顾:Trie 中的总单词数

  8. 8

    挑战 2:查找字典树中存储的所有单词

  9. 9

    解决方案回顾:在字典树中查找所有存储的单词

  10. 10

    挑战 3:使用字典树进行列表排序

  11. 11

    解决方案回顾:使用字典树进行列表排序

  12. 12

    挑战4:使用字典树从向量中构造单词

  13. 13

    解决方案回顾:使用字典树进行词的生成

  14. 14

    Trie测验:检验你对Trie的理解

堆简介
  1. 1

    简介

  2. 2

    最大堆:简介

  3. 3

    最大堆(实现)

  4. 4

    最小堆:简介

  5. 5

    最小堆(实现)

  6. 6

    挑战 1:将最大堆转换为最小堆

  7. 7

    解题回顾:将最大堆转换为最小堆

  8. 8

    挑战 2:在数组中查找“k”个最小元素

  9. 9

    解决方案回顾:在数组中查找“K”个最小元素

  10. 10

    挑战3:在数组中查找“K”个最大的元素

  11. 11

    解题回顾:在数组中查找“K”个最大的元素

  12. 12

    堆测验:检验你对堆的理解

哈希简介
  1. 1

    哈希与哈希表简介

  2. 2

    哈希函数

  3. 3

    哈希表中的冲突

  4. 4

    从零开始构建哈希表

  5. 5

    哈希表的添加/删除与查找(实现)

  6. 6

    哈希表快速概览

  7. 7

    Trie 与哈希表

  8. 8

    哈希表(HashTable)、字典(Dictionary)和集合(HashSet)都是用于存储键值对或唯一元素的数据结构,它们在功能和性能上各有特点。以下是它们的对比: 1. **HashTable** - 是 .NET Framework 中较早的哈希表实现,属于 System.Collections 命名空间。 - 支持任意类型的键和值(即 `object` 类型),因此需要频繁的装箱和拆箱操作,影响性能。 - 线程不安全,多个线程同时访问时需手动加锁。 - 不推荐在新代码中使用,已被 Dictionary<T, T> 取代。 2. **Dictionary<TKey, TValue>** - 是 .NET Framework 2.0 引入的泛型版本,位于 System.Collections.Generic 命名空间。 - 支持类型安全,键和值类型在编译时确定,避免了装箱/拆箱。 - 性能优于 HashTable,是现代 C# 编程中处理键值对的首选。 - 线程不安全,多线程环境下需额外同步机制。 3. **HashSet<T>** - 用于存储唯一元素的集合,不包含键值对,只关心元素是否存在。 - 内部基于哈希表实现,提供 O(1) 的平均查找、插入和删除时间复杂度。 - 适用于需要快速判断元素是否存在的场景,如去重、集合运算(并集、交集等)。 - 同样线程不安全,多线程使用时需外部同步。 总结: - 若需存储键值对,优先使用 **Dictionary<TKey, TValue>**。 - 若仅需存储唯一元素,应选择 **HashSet<T>**。 - **HashTable** 已过时,除非维护旧代码,否则不应再使用。

  9. 9

    挑战 1:一个数组作为另一个数组的子集

  10. 10

    解决方案回顾:一个数组是否为另一个数组的子集

  11. 11

    挑战 2:检查数组是否互不相交

  12. 12

    解决方案回顾:检查数组是否互不相交

  13. 13

    挑战 3:在数组中查找对称数对

  14. 14

    解决方案回顾:在数组中查找对称数对

  15. 15

    挑战 4:追踪旅程的完整路径

  16. 16

    解决方案回顾:追踪旅程的完整路径

  17. 17

    挑战 5:在数组中找出两对元素,使其和相等

  18. 18

    解题回顾:在数组中找出两对元素,使其和相等

  19. 19

    挑战6:和为0的子数组

  20. 20

    解题回顾:和为 0 的子数组

  21. 21

    挑战7:在数组中查找第一个唯一整数

  22. 22

    解决方案回顾:在数组中查找第一个唯一整数

  23. 23

    挑战 8:使用哈希表从链表中删除重复项

  24. 24

    解题回顾:使用哈希表去除链表中的重复节点

  25. 25

    挑战9:使用哈希技术实现链表的并集与交集

  26. 26

    解决方案回顾:使用哈希表实现列表的并集与交集

  27. 27

    挑战 10:找出两个相加等于“目标值”的数

  28. 28

    解决方案回顾:找出两个相加等于“目标值”的数

  29. 29

    哈希测验:检验你对哈希的理解

数据结构概述
  1. 1

    线性与非线性数据结构概述

  2. 2

    结论

Certificate of Completion

Showcase your accomplishment by sharing your certificate of completion.

Course Author:Anonymous User

Reviews

Read reviews from students who have taken this course and share your own experience.

Reviews & Comments (0)