c#堆栈队列组合

在C#中有一些已定义的通用容器,它可以同时用作Stack和Queue吗? 我只是希望能够将元素追加到末尾或队列的前面

谢谢

检查LinkedList类。

LinkedList list = new LinkedList(); list.AddFirst(1); list.AddLast(2); list.AddFirst(0); 

这是我对不可变deque的实现

http://blogs.msdn.com/ericlippert/archive/2008/02/12/immutability-in-c-part-eleven-a-working-double-ended-queue.aspx

请注意,这是一个不可变的双端队列。 通常你可能会认为队列是你变异的东西:

 queue.Enqueue(10); 

不可变队列始终保持不变; 当您添加新元素时,它会为您提供一个全新的队列,因此您可以将其用作:

 queue = queue.Enqueue(10); 

如果你不再关心旧的价值。

你想要的是一个链表 – 在BCL中有一个 – 有AddFirst和AddLast方法

这是一个帮助人们轻松实现这一目标的课程:

 public class StackQueue { private LinkedList linkedList = new LinkedList(); public void Push(T obj) { this.linkedList.AddFirst(obj); } public void Enqueue(T obj) { this.linkedList.AddFirst(obj); } public T Pop() { var obj = this.linkedList.First.Value; this.linkedList.RemoveFirst(); return obj; } public T Dequeue() { var obj = this.linkedList.Last.Value; this.linkedList.RemoveLast(); return obj; } public T PeekStack() { return this.linkedList.First.Value; } public T PeekQueue() { return this.linkedList.Last.Value; } public int Count { get { return this.linkedList.Count; } } } 

好的旧List会做到这一点。

Add()以入队, Insert(0,T)以推送, Remove(0)以弹出/出列。