用两个队列实现一个栈

来源:互联网 发布:手机淘宝有评价管理吗 编辑:程序博客网 时间:2024/05/16 12:37
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;        }    }
主要的思想是在两个队列中倒腾,当入队的时候,找一个非空的入队,如果都空就随便找一个入队,出队的时候,从有数据元素的队列中出队到另一个队列,直到只剩最后一个元素,然后作为模拟出栈的元素。任意时刻在操作前至少有一个队列是空的。
原创粉丝点击