.net中是否有双面堆栈类?

时间:2011-11-10 20:36:44

标签: .net

我了解System.Collections.Stack。我正在寻找一个支持PushFront()& amp;则PushBack()。

4 个答案:

答案 0 :(得分:11)

为什么不使用/ wrap LinkedList<T>?它有AddFirstAddLast方法。您可以将其包装以隐藏AddBefore等方法。

这个常用术语是deque(它意味着双端队列)。如果由于某种原因包装LinkedList<T>是不够的(它应该!),你可以看看Eric Lippert对immutable deque的实现。

答案 1 :(得分:9)

听起来你想要通常称为deque的东西。我在.NET中最接近的是LinkedList<T>。我不相信有一个是从循环缓冲区构建的(根据需要扩展),这是你可能想要从头开始构建它的方式。

当然,你可以自己实现它 - 但我可能会使用LinkedList<T>,除非我有充分的理由不这样做。 Eric Lippert也有an immutable implementation you could look atblog post covering it),但显然你想写一堆测试等等......你可能不会想要一个不可变的。< / p>

答案 2 :(得分:2)

你要找的是一个双端队列。以下是一个示例:http://www.codeproject.com/KB/recipes/deque.aspx

答案 3 :(得分:0)

为什么不使用LinkedList<T>?它允许添加开始,结束和介于两者之间的任何地方。如果您不想公开某些LinkedList<T>方法,那么您可以始终将其包装并仅显示您要公开的方法。