解析:保证两个队列有一个队列为空,非空队列用于入队,空队列用于存储非空队列出队的元素,依次交替进行。
#include <iostream>
#include <deque>
#include <assert.h>
using namespace std;
template <class T> class CStack
{
public:
CStack(){}
~CStack(){}
void stack_push(const T& element);
void stack_pop();
private:
deque<T> deque1;
deque<T> deque2;
};
template <class T> void CStack<T>::stack_push(const T& element)//变量入非空队列
{
if(deque1.size() > 0)
{
deque1.push_back(element);
}
else if(deque2.size() > 0)
{
deque2.push_back(element);
}
else
{
deque1.push_back(element);
}
}
template <class T> void CStack<T>::stack_pop()//非空队列变量出队进入另一个空队列,直到仅剩一个元素
{
if(deque1.size()>0 && deque2.size()==0)
{
while(deque1.size()>1)
{
T data = deque1.front();
deque1.pop_front();
deque2.push_back(data);
}
assert(deque1.size()==1);
T result = deque1.front();
deque1.pop_front();
cout<<result<<endl;
}
else if(deque2.size()>0 && deque1.size()==0)
{
while(deque2.size()>1)
{
T data = deque2.front();
deque2.pop_front();
deque1.push_back(data);
}
assert(deque2.size()==1);
T result = deque2.front();
deque2.pop_front();
cout<<result<<endl;
}
}
int main()
{
CStack<int> stack1;
int data,i;
cout<<"请输入入栈元素:"<<endl;
for(i=0;i<5;i++)
{
cin>>data;
stack1.stack_push(data);
}
cout<<"出栈顺序为:"<<endl;
for(i=0;i<5;i++)
stack1.stack_pop();
return 0;
}