LeetCode 【225.用队列实现栈】

LeetCode 【225.用队列实现栈】

方法:模拟

:后进后出,顶端入,顶端出
队列:先进先出,队尾进,队头出
采用的方法是用两个队列来模拟栈的操作

  1. queue1用来存储栈内的元素,queue2作为入栈操作的辅助队列
  2. 入栈操作时,先将元素入栈到queue2,然后将queue1的元素出队再入队到queue2,此时queue2的前端都是新入栈的元素,然后再swap(queue1,queue2),queue1内的元素就是栈内的元素,queue1的前端就是栈顶,后端就是栈底
  3. 出栈操作和获得栈顶元素操作都很容易实现 因为入栈操作queue1的前端都是栈顶元素,出栈移除queue1的前端并return,获得栈顶元素只要获得queue1的前端并return
  4. 判断栈是否为空,只需要判断queue1是否为空
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()) //判断queue1是否为空,如果为空,就不需要将queu1中的元素加入queue2
        {
            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();
    }
};
上一篇:225. 用队列实现栈(实现和理论还是不一样的)


下一篇:leetccode 225. 用队列实现栈(两个队列模拟)