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