//两个栈实现队列
#include <iostream>
#include <stack>
#include <cstdio>
using namespace std;
template <typename T> class myQueue
{
public:
myQueue(void){}
~myQueue(void){}
void appendTail(const T& node);
T deleteHead();
int size() const;
private:
stack<T> stack1;
stack<T> stack2;
};
template <typename T>
void myQueue<T>::appendTail(const T& node)
{
stack1.push(node);
}
template <typename T>
T myQueue<T>::deleteHead()
{
if(stack2.empty())
{
while(!stack1.empty())
{
T node = stack1.top();
stack1.pop();
stack2.push(node);
}
}
if(stack2.empty())
throw std::exception("queue is empty");
T node = stack2.top();
stack2.pop();
return node;
}
template <typename T>
int myQueue<T>::size() const
{
return stack1.size()+stack2.size();
}
int main()
{
myQueue<int> que;
que.appendTail(5);
que.appendTail(4);
que.appendTail(3);
que.appendTail(10);
while(que.size()!=0)
{
cout<<que.deleteHead()<<" ";
}
cout<<endl;
return 0;
}