- 两个队列实现一个栈的主要思想在于:在任意时刻我们都需要保证一个队列是空的,因此我们可以固定队列2在任何时刻都为空。
代码如下:(参考力扣官网题解)
class MyStack
{
public:
queue<int> queue1;
queue<int> queue2;
//Initialize your data structure here.
MyStack()
{
}
// Push element x onto stack.
void push(int x)
{
queue2.push(x);
while (!queue1.empty())
{
queue2.push(queue1.front());
queue1.pop();
}
swap(queue1, queue2);
}
// Removes the element on top of the stack and returns that element.
int pop()
{
int r = queue1.front();
queue1.pop();
return r;
}
// Get the top element.
int top()
{
int r = queue1.front();
return r;
}
// Returns whether the stack is empty.
bool empty()
{
return queue1.empty();
}
};
这段代码展示了如何利用两个队列作为数据结构,实现栈的基本操作,包括push、pop、top和empty。在push时,将元素全部从queue1转移到queue2,然后将新元素压入queue1;在pop和top时直接操作queue1即可,因为queue2始终保持为空。这种方法巧妙地利用了队列的特性来模拟栈的行为。
1040

被折叠的 条评论
为什么被折叠?



