算法思想:利用队列先进先出和栈后进先出的特点,当我们要push数据的时候,不用像两个栈实现队列那样需要将有数据的队列中的数据导入另一个空队列,只需要判断哪个队列不为空,然后将数据push到部位空的队列中。
pop数据时,需要将有元素的队列中的n-1元素放到空队列中,剩下的一个元素就是要pop的元素。
#include<iostream>
#include <queue>
using namespace std;
template<class T>
class Stack
{
public:
void push(const T& x)
{
if (!q1.empty())
{
q1.push(x);
}
else
{
q2.push(x);
}
}
void pop()
{
queue<T>* emptyQ = &q1;
queue<T>* nonemptyQ = &q2;
if (!emptyQ->empty())
{
swap(emptyQ, nonemptyQ);
}
while (1)
{
T tmp = nonemptyQ->front();
nonemptyQ->pop();
if (!nonemptyQ->empty())
{
emptyQ->push(tmp);
}
else
{
cout << tmp << " ";
break;
}
}
}
private:
queue<T> q1;
queue<T> q2;
};
void test()
{
Stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.pop();
s.push(4);
s.pop();
s.pop();
s.pop();
}
int main()
{
test();
return 0;
}