c#堆栈队列组合

时间:2009-11-25 16:55:44

标签: c# stack queue containers

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

感谢

5 个答案:

答案 0 :(得分:35)

检查LinkedList课程。

LinkedList<int> list = new LinkedList<int>();

list.AddFirst(1);
list.AddLast(2);
list.AddFirst(0);

答案 1 :(得分:13)

这是我对 immutable 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);

如果您不再关心旧值。

答案 2 :(得分:4)

你想要的是一个linked list - BCL中有一个 - 有AddFirstAddLast方法

答案 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)弹出/出列。