用两个队列实现一个栈
2016-05-08 10:38
204 查看
前面说了用两个栈实现一个队列的算法,现在在写一个反过来的算法:
1.算法描述:
栈的特点就是先进后出,而队列的特点就是先进先出,基于两者的特点,有了此算法:
先看一张图:都喜欢图,图也能直接表达题的意思和本人的意思:
图中已经说的很清楚了,多余的方法暂且不说,按以上的图和思路,我给出以下代码:供自己参考:
1.算法描述:
栈的特点就是先进后出,而队列的特点就是先进先出,基于两者的特点,有了此算法:
先看一张图:都喜欢图,图也能直接表达题的意思和本人的意思:
图中已经说的很清楚了,多余的方法暂且不说,按以上的图和思路,我给出以下代码:供自己参考:
/* *设有两个队列A和B,栈的push操作,直接push到A的队尾就行了。 *栈的pop操作时,将A中的队列依次取出放到B中,取到最后一个时, *最后一个不要放到B中,直接删掉,再将B中的值依次放回A中。 *栈的top操作时,将A中的队列依次取出放到B中,取到最后一个时, *将最后一个值记录下来,再将最后一个值放到B中,再将B中的值依次放回到A中 */ #include<iostream> #include <queue> using namespace std; template<class T> class Mystack { public: Mystack() {} ~Mystack() {} public: void Push(T value); T Top(); T Pop(); private: queue<T> Queue1; queue<T> Queue2; }; //入栈 template<class T> void Mystack<T>::Push(T a) { Queue1.push(a); } //栈顶 template<class T> T Mystack<T>::Top() { return Queue1.back();//???????????这里是否可以 } //出栈 template<class T> T Mystack<T>::Pop() { int node = 0; while(Queue1.back() != Queue1.front()) { int num = Queue1.front(); Queue2.push(num); Queue1.pop(); } node = Queue1.back(); Queue1.pop(); while(!Queue2.empty()) { int num = Queue2.front(); Queue1.push(num); Queue2.pop(); } return node; } void Test() { Mystack<int> s1; s1.Push(1); s1.Push(2); s1.Push(3); s1.Push(4); s1.Push(5); cout<<s1.Top()<<endl; for(int i = 0; i < 5; i++) { cout<<s1.Pop()<<"->"; } cout<<"NULL"<<endl; } int main() { Test(); return 0; }
相关文章推荐
- 哈希分片之哈希取模法(round robin)
- 多线程——线程通信
- C语言函数的参数及传递方式
- 2016百度春季实习生面试
- C++静态成员
- 爬虫
- hihocoder 20 展胜地的鲤鱼旗
- Litepal初始化数据库问题研究
- 程序员读书雷达
- Android 拨号
- WEB前端开发最佳实践(2)
- CentOS_6.7高可用服务Heartbeat_v3.0.4安装以及配置
- poj 2406 KMP求周期数
- hdu4857(逃生)
- php中session的用法
- 整数中1出现的次数(从1到n整数中1出现的次数)
- 为什么我们选择parquet
- myeclipse集成weblogic
- linux下Apache+Svn环境搭建(五)
- uva 11212