#include <iostream>
#include <stack>
#include <exception>
using namespace std;
template <typename T> class CQueue{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T& node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
template <typename T> CQueue<T>::CQueue(void){}
template <typename T> CQueue<T>::~CQueue(){}
template <typename T>void CQueue<T>::appendTail(const T& node){
stack1.push(node);
}
template <typename T> T CQueue<T>::deleteHead(){
if(stack2.empty()){
while(!stack1.empty()){
int tmp=stack1.top();
stack2.push(tmp);
stack1.pop();
}
}
if(stack2.empty())
throw new exception("queue is empty");
T t=stack2.top();
stack2.pop();
return t;
}
int main(){
CQueue<int> q;
// int t=q.deleteHead();
// cout<<t<<endl;
cout<<"test";
int t;
q.appendTail(1);
t=q.deleteHead();
cout<<t<<endl;
q.appendTail(2);
q.appendTail(4);
t=q.deleteHead();
cout<<t<<endl;
q.appendTail(5);
t=q.deleteHead();
cout<<t<<endl;
t=q.deleteHead();
cout<<t<<endl;
t=q.deleteHead();
cout<<t<<endl;
return 0;
}
#include <stack>
#include <exception>
using namespace std;
template <typename T> class CQueue{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T& node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
template <typename T> CQueue<T>::CQueue(void){}
template <typename T> CQueue<T>::~CQueue(){}
template <typename T>void CQueue<T>::appendTail(const T& node){
stack1.push(node);
}
template <typename T> T CQueue<T>::deleteHead(){
if(stack2.empty()){
while(!stack1.empty()){
int tmp=stack1.top();
stack2.push(tmp);
stack1.pop();
}
}
if(stack2.empty())
throw new exception("queue is empty");
T t=stack2.top();
stack2.pop();
return t;
}
int main(){
CQueue<int> q;
// int t=q.deleteHead();
// cout<<t<<endl;
cout<<"test";
int t;
q.appendTail(1);
t=q.deleteHead();
cout<<t<<endl;
q.appendTail(2);
q.appendTail(4);
t=q.deleteHead();
cout<<t<<endl;
q.appendTail(5);
t=q.deleteHead();
cout<<t<<endl;
t=q.deleteHead();
cout<<t<<endl;
t=q.deleteHead();
cout<<t<<endl;
return 0;
}