【C++】两个队列实现一个栈
2015-11-19 20:49
666 查看
[align=left]两个队列实现一个栈的思想:用_PushQ1队列作为push数据的队列,用_TmpQ2队列暂存数据[/align]
[align=left]1.只要是对栈进行push操作,就将数据push入_PushQ1队列中。[/align]
[align=left]2.要实现栈的pop操作,就要在_PushQ1队列或_TmpQ2队列不为空的情况下:[/align]
[align=left](1)若_PushQ1队列为空,而_TmpQ2队列不为空时,则swap(_TmpQ2, _PushQ1),便得_PushQ1队列不为空,_TmpQ2队列为空。否则直接转(2)[/align]
[align=left] (2)把_PushQ1队列中的数据按照队列的pop规则,都转移到_TmpQ2队列中,直到_PushQ1中的数据只有一个时结束转移。[/align]
(3)执行完步骤(2)后,对_PushQ1队列中仅剩的那一个数据执行pop操作,就是所要实现的栈的pop操作。
[align=left]1.只要是对栈进行push操作,就将数据push入_PushQ1队列中。[/align]
[align=left]2.要实现栈的pop操作,就要在_PushQ1队列或_TmpQ2队列不为空的情况下:[/align]
[align=left](1)若_PushQ1队列为空,而_TmpQ2队列不为空时,则swap(_TmpQ2, _PushQ1),便得_PushQ1队列不为空,_TmpQ2队列为空。否则直接转(2)[/align]
[align=left] (2)把_PushQ1队列中的数据按照队列的pop规则,都转移到_TmpQ2队列中,直到_PushQ1中的数据只有一个时结束转移。[/align]
(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; }
相关文章推荐
- C++点滴
- C++学习第六课--引用
- GUN C/C++ __attribute__ 用法
- xcode中c++变量断点不显示
- C/C++——auto,static,register,extern用法
- C++11与Unicode及使用标准库进行UTF-8、UTF-16、UCS2、UCS4/UTF-32编码转换
- C++:位操作基础篇之位操作全面总结
- c语言关于时间的两个函数
- 学习笔记7-C语言预处理
- c++ 返回对象的引用要小心
- C++学习 (使用类)
- c语言文件IO库函数——APUE学习笔记(1)
- 魔方矩阵 C++实现
- C++ 二叉树的遍历
- C语言错误日志——指针返回值与数组
- C语言公式--爱情的年轮
- C++ListControl颜色控制
- C语言编程中借助pthreads库进行多线程编程的示例
- c++ txt文件的读写及乱码问题解决
- 用C语言进行最基本的socket编程