C#用两个栈来实现队列

队列的两种实现方式一种是数组一种是栈,此处介绍如何将用两个栈来实现一个队列

我们知道栈的特点是FILO(先进后出),而队列的特点是FIFO(先进先出),所以用栈实现队列必须使用两个栈,一个用于执行push和pop操作,另一个用于存放前一个临时出栈的变量。


下面是C#代码(完全原创,如有雷同,不胜荣幸)


using System.Collections.Generic;

namespace PToffer05
{
    class Solution
    {
        Stack<int> s1 = new Stack<int>();
        Stack<int> s2 = new Stack<int>();
        int l1 = 0;
        int l2 = 0;

        public void push(int node)
        {
            //注意这里,必须用ll2代替l2,因为l2在循环中会变化
            int ll2 = l2;
            for(int i=0;i<ll2; i++)
            {
                s1.Push(s2.Pop());
                l1++;
                l2--;
            }
            //这里只变s1,所以只有l1++
            s1.Push(node);
            l1++;
        }
        public int pop()
        {
            //注意这里,必须用ll1代替l1,因为l1在循环中会变化

            int ll1 = l1;
            //每次s1要出栈之前检查有没有元素,如果s1为空,s2不为空,则先把s2最上面的压到s1里面,后面出栈出这个
            //注意,l1和l2要跟随变化
            if (ll1 == 0 && l2 != 0)
            {
                s1.Push(s2.Pop());
                l2--;
                l1++;
            }

            for(int i =0;i<ll1-1;i++)
            {
                s2.Push(s1.Pop());
                l2++;
                l1--;
            }

            //这里只变s1,所以只有l1--
            int shuchu = s1.Pop();
            l1--;
            return shuchu;


        }
    }
}

发布了71 篇原创文章 · 获赞 27 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/github_34777264/article/details/81192726