在C#中有一些已定义的通用容器,可以同时用作Stack和Queue吗? 我只是希望能够将元素追加到结尾或队列前面
感谢
答案 0 :(得分:35)
检查LinkedList课程。
LinkedList<int> list = new LinkedList<int>();
list.AddFirst(1);
list.AddLast(2);
list.AddFirst(0);
答案 1 :(得分:13)
这是我对 immutable deque 的实现:
请注意,这是一个不可变的双端队列。通常你可能会认为队列是你变异的东西:
queue.Enqueue(10);
不可变队列始终保持不变;当您添加新元素时,它会为您提供一个全新的队列,因此您将其用作:
queue = queue.Enqueue(10);
如果您不再关心旧值。
答案 2 :(得分:4)
你想要的是一个linked list - BCL中有一个 - 有AddFirst和AddLast方法
答案 3 :(得分:3)
这是一个帮助人们轻松实现这一目标的课程:
public class StackQueue<T>
{
private LinkedList<T> linkedList = new LinkedList<T>();
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;
}
}
}
答案 4 :(得分:-1)
好老List<T>
会做到。
Add()
加入队列,Insert(0,T)
推送,Remove(0)
弹出/出列。