题目描述
使用两个队列实现一个栈,包含入栈push()和出栈pop()操作
原理
将队列A作为当前容器,队列B不管,当入栈push()操作时,全部入队到A,而当A不为空且需要出栈pop()时,将A的前n-1个元素出队到B队列里,如图
![]()
则队列A中最后一个元素出队即该”栈”出栈pop()。而当需要再次入栈时,则对队列B进行之前的操作,循环往复。
原理掌握,则每次需要做的就是判断当前哪个队列不为空就对其进行操作。
代码实现
下面代码为整型int的实现,如需其他类型则可用模板template实现,仅供参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class QueueToStack { public: queue<int> queue1; queue<int> queue2; void push(int num) { if (!queue2.empty()) queue2.push(num); else queue1.push(num); } int pop() { if (!queue1.empty()) { while (queue1.size() > 1) { queue2.push(queue1.front()); queue1.pop(); } int res = queue1.front(); queue1.pop(); return res; }else if (!queue2.empty()) { while (queue2.size() > 1) { queue1.push(queue2.front()); queue2.pop(); } int res = queue2.front(); queue2.pop(); return res; } cout << "栈为空!" << endl; return 0; } }
|