时间:2019-03-17 标签:c#stackqueuecombination

发布于 2024-08-13 02:33:48 字数 71 浏览 7 评论 0原文

C# 中是否有一些已经定义的通用容器可以同时用作堆栈和队列? 我只是希望能够将元素附加到队列的末尾或前面,

谢谢

is there in C# some already defined generic container which can be used as Stack and as Queue at the same time?
I just want to be able to append elements either to the end, or to the front of the queue

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

断肠人 2024-08-20 02:33:48

检查 LinkedList 类。

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

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

Check the LinkedList class.

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

list.AddFirst(1);
list.AddLast(2);
list.AddFirst(0);
子栖 2024-08-20 02:33:48

这是我对不可变双端队列的实现:

http://blogs.msdn.com/ericlippert/archive/2008/02/12/immutability-in-c-part-eleven-a-工作双端队列.aspx

请注意,这是一个不可变双端队列。通常,您可能会将队列视为您可以改变的东西:

queue.Enqueue(10);

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

queue = queue.Enqueue(10);

如果您不再关心旧值。

Here's my implementation of an immutable deque:

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

Notice that this is an immutable double-ended-queue. Normally you probably think of a queue as something you mutate:

queue.Enqueue(10);

An immutable queue always stays the same; when you add a new element, it gives you back an entirely new queue, so you use it as:

queue = queue.Enqueue(10);

if you no longer care about the old value.

纸伞微斜 2024-08-20 02:33:48

你想要的是一个链接列表 - BCL中有一个 -具有 AddFirstAddLast 方法

What you want is a linked list - there's one in the BCL - that has AddFirst and AddLast methods

萌酱 2024-08-20 02:33:48

这里有一个类可以帮助人们轻松实现这一点:

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;
        }
    }
}

Here's a class to help people implement this easily:

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;
        }
    }
}
送君千里 2024-08-20 02:33:48

好的旧 List 就可以做到。

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

Good old List<T> will do it.

Add() to enqueue, Insert(0,T) to push, Remove(0) to pop/dequeue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文