C++两个队列实现一个栈
2015-06-21 22:03
736 查看
C++两个队列实现一个栈
/* * source.cpp * * Created on: 2015年6月21日 * Author: codekiller */ #include "iostream" #include "queue" #include <exception> #include "stdexcept" using namespace std; #define should_not_reach_here template <typename T> class QStack{ public: QStack(void){}; ~QStack(void){}; void push(const T& element); T pop(); private: queue<T> queue1; queue<T> queue2; }; template <typename T> void QStack<T>::push(const T& element){ if(!queue2.empty()) queue2.push(element); else if(!queue1.empty()) queue1.push(element); else if(queue1.empty()&&queue2.empty()) queue1.push(element); } template <typename T> T QStack<T>::pop(){ if(queue1.size()==0&&queue2.size()==0) { throw underflow_error(string("QStack UnderFlow")); //return 0; } if(queue1.size()==0){ while(queue2.size()>1){ queue1.push(queue2.front()); queue2.pop(); } T & dataout=queue2.front(); queue2.pop(); return dataout; }else if(queue2.size()==0){ while(queue1.size()>1){ queue2.push(queue1.front()); queue1.pop(); } T & dataout=queue1.front(); queue1.pop(); return dataout; } should_not_reach_here } int main(){ QStack<int> sstack; sstack.push(1); cout<<sstack.pop()<<endl; sstack.push(100); try{ cout<<sstack.pop()<<endl; cout<<sstack.pop()<<endl; cout<<sstack.pop()<<endl; } catch(underflow_error &err){ cerr<<err.what()<<endl; } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- 算法系列15天速成 第九天 队列
- C++编写简单的打靶游戏
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++中拷贝构造函数的应用详解
- C++中引用(&)的用法与应用实例分析
- C++使用CriticalSection实现线程同步实例