【问题标题】:Definition of C# data structures and algorithmsC# 数据结构和算法的定义
【发布时间】:2010-11-12 23:59:22
【问题描述】:

这可能是一个愚蠢的问题(与 MSDN 和所有),但也许你们中的一些人将能够帮助我筛选大量的信息。

我需要了解 C# 中常见数据结构和算法的实现细节。也就是说,例如,我需要知道链接列表是如何处理和表示的,它们及其方法是如何定义的。

是否有一个很好的集中式文档来源(带有代码),还是我应该重建它?您是否曾经必须知道这些东西的具体细节才能决定使用什么?

问候,谢谢。

【问题讨论】:

  • 距离面试还有多少时间?
  • 哈哈哈哈哈哈哈哈哈。我不做采访。我是一个可怜的compsci教授。只是做一些研究,这已经变得至关重要。但这让我笑了。
  • 糟糕。很抱歉,我在不知不觉中向 CS 教授推荐了 CLRS!
  • 别担心,他确实说过“穷”,所以也许他还买不起;)
  • 不需要什么都买。我们中的许多人只是从图书馆读到这些书,不需要自己知道。 :)

标签: c# algorithm data-structures


【解决方案1】:

取决于语言。大多数语言现在都预先构建了非常基础的内容,但这并不意味着它们的实现是相同的。同名对象——C#中的LinkedList与Java或C++中的LinkedList完全不同。甚至 String 库也不一样。例如,众所周知,C# 会在每次为字符串分配新值时创建一个新的 String 对象……当您第一次在 C# 中使用子字符串时,当它使您的程序崩溃时,这会成为您快速学习的东西时间。

所以你的问题的答案非常复杂,因为我不太清楚你在追求什么。如果您只是要教一堂课这些算法和数据结构的通用版本是什么,您可以在不涉及我上面提到的问题的情况下介绍它们。您只需要选择、查找、阅读它们的特定类型的实现。与 LinkedList 一样,您需要能够实例化列表、销毁列表、复制列表、添加到列表的某个位置(通常是前/后)、从列表中删除等。您可以花哨并添加尽可能多的方法你想要的。

【讨论】:

  • 仅供参考,OP 专门询问 C# 的实现;想看看它们是如何编码的。
【解决方案2】:

Scott Mitchell 有一篇很棒的文章,由 6 部分组成,涵盖了许多 .NET 数据结构:

An Extensive Examination of Data Structures

对于数据结构的算法概述,我建议阅读 算法教科书:Cormen 等人的“算法简介”。

有关每个 .NET 数据结构的详细信息,请参阅该特定类的 MSDN 页面。

当他们都未能解决问题时,Reflector 总是在那里。您可以使用它来挖掘实际来源并亲自查看内容。

【讨论】:

  • 很好的答案,梅尔达德。谢谢。也感谢您澄清我对 samoz 的评论。
【解决方案3】:

如果你真的想学,试着自己做。

谷歌搜索链接列表会给你很多点击和示例代码。 Wikipedia 也将是一个很好的资源。

【讨论】:

  • 这不是一个坏主意......但我想知道如果不真正了解 CLI 或类似的东西,我可能永远无法实现 C# ahs 优化,而且我没有时间去太详细了。
  • @Dervin:我认为集合类在 CIL 级别上没有任何特定的优化。但是,在内部,运行时可以以特殊方式处理某些类。例如,我认为 List<T> 动作是由运行时优化的。