225. Implement Stack using Queues

思路:
之前做过用栈模拟队列的题,通过两个栈一个先暂存数据,判断另一个栈是否为空,不为空就暂时不添加,如果为空就从暂存的栈将元素放入该栈。
这里用队列模拟栈也是类似的,也需要两个队列来做,一个用来辅助。不过这里是栈,后加的先出,所以我们每添加一个元素,就要把用来当作栈的队列的所有元素放入另一个暂存的队列中,然后再把暂存的队列元素拿进当作栈的队列里,即可完成栈的模拟。也就是入栈的方法。其余的函数比较简单。
代码:

class MyStack {
private:
    queue<int> q1,q2;
public:
    /** Initialize your data structure here. */
    MyStack() {}
    
    /** Push element x onto stack. */
    void push(int x) {
        q2.push(x);
        while(!q1.empty()){
            q2.push(q1.front());
            q1.pop();
        }
        while(!q2.empty()){
            q1.push(q2.front());
            q2.pop();
        }
    }
    
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        int p=q1.front();
        q1.pop();
        return p;
    }
    
    /** Get the top element. */
    int top() {
        return q1.front();
    }
    
    /** Returns whether the stack is empty. */
    bool empty() {
        return q1.empty();
    }
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */
posted @ 2021-04-26 22:53  Mrsdwang  阅读(30)  评论(0编辑  收藏  举报