解题思路:
1.使用两个队列queue1 , queue2 用于互相挪动数据。
2.push 的时候找到一个非空的 queue , push数据 ,如果两个都为空 ,任意一个进行push。
3.pop 的时候由于队列是先进先出 , 我们要把最后一个数据的前面的数据挪到另一个队列中,于是要找到一个 空 队列,进行挪数据, 直到剩余最后一个数据 ,进行返回。
4.top 的时候返回非空队列的最后一个元素 ,queue.pack()
5.empty 只有两个队列都为空的时候 才为空。
class MyStack {
public:
queue<int> queue1;
queue<int> queue2;
MyStack() {
}
void push(int x)
{
if(queue1.empty())
{
queue2.push(x);
}
else
{
queue1.push(x);
}
}
int pop()
{
queue<int>* Empty = &queue1;
queue<int>* nEmpty = &queue2;
if(!Empty->empty())
{
swap(Empty,nEmpty);
}
while(nEmpty->size() > 1)
{
Empty->push(nEmpty->front());
nEmpty->pop();
}
int top = nEmpty->front();
nEmpty->pop();
return top;
}
int top()
{
if(queue1.empty())
{
return queue2.back();
}
else
{
return queue1.back();
}
}
bool empty()
{
return queue1.empty() && queue2.empty();
}
};