用队列实现栈

力扣225. 用队列实现栈

思路:主要是出栈操作,可以使用两个队列,出栈时将入栈队列中数据压入辅助队列中,直到入栈队列只剩下一个数据就是栈顶元素,然后再把辅助队列中元素全部压回入栈队列中,清空辅助队列

public:
    queue<int> que1;
    queue<int> que2;
    MyStack() {

    }
    
    void push(int x) {
        que1.push(x);
    }
    
    int pop() {
        while(que1.size()!=1){
            que2.push(que1.front());
            que1.pop();
        }
        int result = que1.front();
        que1.pop();

        // while(!que2.empty()){
        //     que1.push(que2.front());
        //     que2.pop();
        // }

        que1 = que2;            // 再将que2赋值给que1
        while (!que2.empty()) { // 清空que2
            que2.pop();
        }
        
        return result;
    }
	
    int top() {
        return que1.back();;
    }
    
    bool empty() {
        return que1.empty();
    }
};

优化,其实只需要一个队列就能实现,出栈时只需将元素压入队列尾部

class MyStack {
public:
    queue<int> que;
    /** Initialize your data structure here. */
    MyStack() {

    }
    /** Push element x onto stack. */
    void push(int x) {
        que.push(x);
    }
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        int size = que.size();
        size--;
        while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部
            que.push(que.front());
            que.pop();
        }
        int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了
        que.pop();
        return result;
    }

    /** Get the top element. */
    int top() {
        return que.back();
    }

    /** Returns whether the stack is empty. */
    bool empty() {
        return que.empty();
    }
};
posted @ 2024-03-10 10:40  go__Ahead  阅读(2)  评论(0编辑  收藏  举报