【C++】两个队列实现一个栈
来源:互联网 发布:linux开启udp端口 编辑:程序博客网 时间:2024/06/07 07:18
两个队列实现一个栈的思想:用_PushQ1队列作为push数据的队列,用_TmpQ2队列暂存数据
1.只要是对栈进行push操作,就将数据push入_PushQ1队列中。
2.要实现栈的pop操作,就要在_PushQ1队列或_TmpQ2队列不为空的情况下:
(1)若_PushQ1队列为空,而_TmpQ2队列不为空时,则swap(_TmpQ2, _PushQ1),便得_PushQ1队列不为空,_TmpQ2队列为空。否则直接转(2)
(2)把_PushQ1队列中的数据按照队列的pop规则,都转移到_TmpQ2队列中,直到_PushQ1中的数据只有一个时结束转移。
(3)执行完步骤(2)后,对_PushQ1队列中仅剩的那一个数据执行pop操作,就是所要实现的栈的pop操作。
#include<iostream>#include<queue>using namespace std;class Stack{public: void Push(const int & x) { _PushQ1 .push( x); } void Pop() { if (!Empty()) { if (_PushQ1 .empty() && !_TmpQ2 .empty()) { swap(_PushQ1 , _TmpQ2 ); } int size = _PushQ1 .size(); while (--size) { _TmpQ2 .push(_PushQ1 .front()); _PushQ1 .pop(); } _PushQ1 .pop(); } } const int & Top() { if (!Empty()) { if (_PushQ1 .empty() && !_TmpQ2 .empty()) { swap(_PushQ1 , _TmpQ2 ); } int size = _PushQ1 .size(); while (--size) { _TmpQ2 .push(_PushQ1 .front()); _PushQ1 .pop(); } return _PushQ1 .front(); } } bool Empty() { return _PushQ1 .empty() && _TmpQ2 .empty(); }private: queue<int >_PushQ1 ; queue<int >_TmpQ2 ;};
<pre name="code" class="cpp">void Test(){Stack s;s.Push(1);s.Push(2);s.Push(3);s.Push(4);s.Push(5);s.Push(6);s.Pop();s.Pop();s.Pop();s.Push(100);s.Pop();s.Pop();s.Pop();}int main(){Test();system("pause");return 0;}
0 0
- 两个栈实现一个队列(C/C++)
- 【C++】两个队列实现一个栈
- 【C++】两个栈实现一个队列
- 两个队列实现一个栈&两个栈实现一个队列
- 两个栈实现一个队列-----两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列 && 两个队列实现一个栈
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个队列实现一个栈&两个栈实现一个队列
- 两个队列实现一个栈 / 两个栈实现一个队列
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 剑指offer07题两个栈实现一个队列(c语言)
- python的内存管理
- Android进阶-复杂的UI框架(一)
- 关于message的消息传递简单的小例子,带部分注释
- MySQL学习笔记-04_Server_Config
- Android Resource Types之Drawable简介
- 【C++】两个队列实现一个栈
- Android进阶-多个ViewPager嵌套时事件传递的处理
- Linux Socket编程(不限Linux)
- 欢迎使用CSDN-markdown编辑器
- 数据库连接配置4 -- 获取JNDI数据源
- 01
- 奇怪的歌手Pancake
- 划分树基础 —— HDU 2665 Kth number
- 隐藏导航栏下划线