您的位置:首页 > 编程语言 > C语言/C++

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++ 队列