c#堆栈队列组合
在C#中有一些已定义的通用容器,它可以同时用作Stack和Queue吗? 我只是希望能够将元素追加到末尾或队列的前面
谢谢
检查LinkedList类。
LinkedList list = new LinkedList (); list.AddFirst(1); list.AddLast(2); list.AddFirst(0);
这是我对不可变deque的实现 :
请注意,这是一个不可变的双端队列。 通常你可能会认为队列是你变异的东西:
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)
以弹出/出列。