C# - Java的双端队列

4
在Java中,有一个名为 Deque的类,我想在.NET (C#)中找到类似的东西。
我需要这个的原因是因为我需要查看集合中的最后一项,然后从集合中出队第一项。
谢谢, AJ Ravindiran。
5个回答

10

请看 .NET 的 System.Collections.Generic.LinkedList 集合,它可以用作双端队列。 这是一个双向链接列表。

插入/删除

Peeking:

  • First/Last 属性。

    这些属性返回一个 LinkedListNode<T>,而不是实际的值。要获取值,您需要在末尾添加 .Value


9

这个有什么优势,高于LinkedList<T>? - Dave Lawrence

2
列表应该为您做到这一点:
var l = new List<int>();
var last = l[l.Count - 1];
l.RemoveAt(0);

3
作为一种暂时的解决方法,这样做可以。问题是RemoveAt(0)需要O(n)的时间。 - bohdan_trotsenko

2

0

类似这样的问题在另一个SO问题中已经被提及过。

流行的答案似乎是使用链表,而Eric Lippert则建议使用他自己的Deque实现

所以我想短暂的回答是,.NET中没有这样严格的数据结构内置。

希望对你有所帮助。


需要注意的是,Eric的Deque实现是一个不可变集合。如果不可变性对您不重要,则可能会有更高效的可变deque实现。 - Stephen Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接