C# 搜索正确的数据结构(添加标头、交换、删除等)
我正在搜索提供以下功能的数据结构:C# 搜索正确的数据结构(添加标头、交换、删除等),c#,data-structures,C#,Data Structures,我正在搜索提供以下功能的数据结构: 在前面添加一个元素 交换两个元素 删除元素 当我添加一个元素(不是在最后一个位置)时,其他元素应该向后滑动(就像在队列中) 访问每个元素 通用的会很好,但不是必要的 我在MSDN上找到的数据结构不能满足我的要求 列表和链接列表不提供交换方法 我可以使用ArrayList,但我想在前面添加一个元素时效率会非常低(因为后面的所有元素都必须被复制和读取) 哈希表不提供订单 队列和堆栈不提供交换、随机访问 我可以编写自己的数据结构,但我不想重新发明轮子,因为.NE
和列表
不提供交换方法链接列表
- 我可以使用
,但我想在前面添加一个元素时效率会非常低(因为后面的所有元素都必须被复制和读取)ArrayList
不提供订单哈希表
和队列
不提供交换、随机访问堆栈
我需要一个数据结构,它提供类似的东西,比如进程优先级调度器。第一个条目的优先级最高,最后一个条目的优先级最低。有时我必须更改元素的优先级(交换)或完全删除元素(删除)。我最近添加的元素应该具有较高的优先级(这就是为什么我将其添加到最前面的位置)您确实需要计算出执行这些操作的频率,因为您列出了非常多的操作 以下是我对你想法的看法:
- 如果已经为get/set建立了索引,那么实现交换方法就很简单了
- 如果您担心复制时间,那么请将列表反转,以便在前面有廉价的插入,您需要重写一些逻辑来完成它,但这不会停止使用数组作为后端
最后一点,您肯定不需要某种类型的自动排序,因为这样做会大大简化操作。您确实需要计算出执行这些操作的频率,因为您列出了极端数量的操作 以下是我对你想法的看法:
- 如果已经为get/set建立了索引,那么实现交换方法就很简单了
- 如果您担心复制时间,那么请将列表反转,以便在前面有廉价的插入,您需要重写一些逻辑来完成它,但这不会停止使用数组作为后端
最后一点,您肯定不需要某种类型的自动排序,因为这会使排序变得非常简单。听起来您需要的是一个堆 堆通常用于管理优先级,可以将优先级最高的项放在队列的顶部,并根据从堆中添加或删除的优先级不同的项重新排列 下面是一个通用集合库,它实现了一个间隔堆:
听起来你要找的是堆 堆通常用于管理优先级,可以将优先级最高的项放在队列的顶部,并根据从堆中添加或删除的优先级不同的项重新排列 下面是一个通用集合库,它实现了一个间隔堆:
我怀疑是否有一种结构提供了交换方法。。。它很容易实现……”“重新发明轮子的好处是,你可以得到一个圆轮子。”-道格拉斯·克罗克福德怀疑有一个结构提供了交换方法。。。实施起来很容易……”“重新发明轮子的好处是,你可以得到一个圆形的轮子。”-道格拉斯·克罗克福德+1。实际上,您可以为IList编写一个扩展方法来实现这一点。我需要一个数据结构来提供类似的功能,比如进程优先级调度器。第一个条目的优先级最高,最后一个条目的优先级最低。有时我必须更改元素的优先级(交换)或完全删除元素(删除)。我最近添加的元素应该具有较高的优先级(这就是为什么我将其添加到最前面的位置)@user1826831:从原始数据结构的角度来看,堆可能是您的最佳选择,尽管实现所有必需的函数可能需要一些工作,但它们都应该能够执行。我留下我的答案,因为它回答了你原来的问题。如果您在查看堆结构后需要更多帮助,请随时发布另一篇文章。感谢您花时间回答我的问题。如果可以,我会接受两个答案。但克兰德瑞的分数比你少。接受克兰德利的回答可能会让他更有动力;)@user1826831:他的答案更正确,因为他包含了您正在寻找的数据结构。我只是把我的答案原封不动地留下来,这样,如果其他人出现并希望得到类似的结果,即使他们没有做优先级队列,他们也会得到一些提示。+1。实际上,您可以为IList编写一个扩展方法来实现这一点。我需要一个数据结构来提供类似的功能,比如进程优先级调度器。第一个条目的优先级最高,最后一个条目的优先级最低。有时我必须更改元素的优先级(交换)或完全删除元素(删除)。我最近添加的元素应该具有较高的优先级(这就是为什么我将其添加到最前面的位置)@user1826831:从原始数据结构的角度来看,堆可能是您的最佳选择,尽管实现所有必需的函数可能需要一些工作,但它们都应该能够执行。我留下我的答案,因为它回答了你原来的问题。如果您在查看堆结构后需要更多帮助,请随时发布另一篇文章。感谢您花时间回答我的问题。如果可以,我会接受两个答案。但克兰德瑞的分数比你少。接受克兰德利的回答也许是我