解析:
我们设定s1是入栈的,s2是出栈的
入队列:直接压入元素至s1即可出队列:如果s2不为空,把s2中的栈顶元素直接弹出。否则,把s1的所有元素全部弹出压入s2中,再弹出s2的栈顶元素
代码:
#include<iostream>
#include<queue>
using namespace std;
template<typename T>
class Stack
{
public:
void Addval(const T &val);
T Delval();
private:
queue<T> queue1;
queue<T> queue2;
};
template<typename T>
void Stack<T>::Addval(const T&val)
{
if (queue2.empty())
{
queue1.push(val);
}
else
queue2.push(val);
}
template<typename T>
T Stack<T>::Delval()
{
if (queue1.size() == 0 && queue2.size() == 0)
{
//异常情况
throw new exception("stack is empty");
}
T ret;
if (queue2.empty())
{
while (queue1.size() > 1)
{
T tmp = queue1.front();
queue1.pop();
queue2.push(tmp);
}
ret = queue1.front();
queue1.pop();
}
else if (queue1.empty())
{
while (queue2.size() > 1)
{
T tmp = queue2.front();
queue2.pop();
queue1.push(tmp);
}
ret = queue2.front();
queue2.pop();
}
return ret;
}
int main()
{
Stack<int> stack;
stack.Addval(1);
stack.Addval(2);
stack.Addval(3);
int ret = stack.Delval();
cout << ret << endl;
int ret2 = stack.Delval();
cout << ret2 << endl;
int ret3 = stack.Delval();
cout << ret3 << endl;
return 0;
}
push:1 2 3
pop:3 2 1