#include <iostream>
#include <stack>
#include <assert.h>
using namespace std;
template <class T> class CQueue
{
public:
CQueue(){}
~CQueue(){}
void queue_append(T &element);
void queue_delete();
private:
stack<T> stack1;
stack<T> stack2;
};
template <class T> void CQueue<T>::queue_append(T &element)//stack1用于入队
{
stack1.push(element);
}
template <class T> void CQueue<T>::queue_delete()//stack2用于出队,stack1将其元素压倒stack2中
{
if(stack2.size() == 0)
{
while(stack1.size()>0)
{
T data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
assert(stack2.size()>0);
T result = stack2.top();
stack2.pop();
cout<<result<<endl;
}
int main()
{
CQueue<int> queue1;
int i,data;
cout<<"入队顺序为:"<<endl;
for(i=0;i<5;i++)
{
cin>>data;
queue1.queue_append(data);
}
cout<<"出队顺序为:"<<endl;
for(i=0;i<5;i++)
queue1.queue_delete();
return 0;
}