用两个队列实现一个栈

class SimulateStackBy2Queues
    {
        private Queue<int> _quque1 = new Queue<int>();
        private Queue<int> _quque2 = new Queue<int>();

        //都是空的,进哪一个无所谓,否则进入非空的
        public void Push(int value)
        {
            if(_quque1.Count==0)
            {
                _quque2.Enqueue(value);
            }
            else
            {
                _quque1.Enqueue(value);
            }
        }

        public int Pop()
        {
            if(Empty())
            {
                throw new Exception("栈空");
            }
            else
            {
                //当queue1是空,从queue2出队,只留一个弹出
                if(_quque1.Count==0)
                {
                    while (_quque2.Count!=1)
                    {
                        _quque1.Enqueue(_quque2.Dequeue());
                    }
                    return _quque2.Dequeue();
                }
                else
                {
                    while (_quque1.Count != 1)
                    {
                        _quque2.Enqueue(_quque1.Dequeue());
                    }
                    return _quque1.Dequeue();
                }
            }
        }

        public bool Empty()
        {
            return _quque1.Count == 0 && _quque2.Count == 0;
        }
    }
主要的思想是在两个队列中倒腾,当入队的时候,找一个非空的入队,如果都空就随便找一个入队,出队的时候,从有数据元素的队列中出队到另一个队列,直到只剩最后一个元素,然后作为模拟出栈的元素。任意时刻在操作前至少有一个队列是空的。

你可能感兴趣的:(exception,Class)