LeetCode-E232-栈-用栈实现队列

题目

使用栈实现队列的下列操作:

  • push(x) -- 将一个元素放入队列的尾部。
  • pop() -- 从队列首部移除元素。
  • peek() -- 返回队列首部的元素。
  • empty() -- 返回队列是否为空。

示例

MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false

思路

使用双栈法,第一个栈保存刚进栈的元素,第二个栈保存从第一个栈出来的元素,即第二个栈为队列顺序
当push一个元素时,先将第二个栈里的元素压入第一个栈,然后往第一个栈中压入新元素,最后又将第一个栈中元素压入第二个栈中。这样就能保证新压入的的元素总是在栈底,满足了队列后入后出的性质。而pop,peek,empty操作可以直接对第二个栈进行正常的栈操作。

解答

class MyQueue {
public:
    void push(int x) {
        a2b(in,out);  
        in.push(x);
        a2b(out,in);
    }
    
    int pop() {
        int res=out.top();
        out.pop();
        return res;
    }
    
    int peek() {
        return out.top();
    }
    
    bool empty() {
        return out.empty();
    }
private:
    stack in;
    stack out;
    //将b里的元素倒序放入a中
    void a2b(stack &a,stack &b) {
        while(!b.empty()) {
            a.push(b.top());
            b.pop();
        }
    }
};

【关注公众号DoCode,每日一道LeetCode,将零碎时间利用起来】

你可能感兴趣的:(LeetCode-E232-栈-用栈实现队列)