leetcode225_用队列实现栈

1、题目

 

 2、分析

  其实一个队列就可以了,就是我们使用一个队列,当需要查询stack头部的元素的时候,可以将其他元素弹出,然后压如的元素底部。

       这样pop是O(n)的操作,而其他的是O(1)的操作(如果不考虑queue内部实现复杂度的话)

3、代码

class MyStack {
public:
    queue<int> pre;
    MyStack() {

    }
    
    void push(int x) {
        pre.push(x);
    }
    
    int pop() {
        int size = pre.size();
        size =  size-1;
        //弹出n-1个数字,然后重新压如
        while(size){
            int num = pre.front();
            pre.pop();
            pre.push(num);
            size--;
        }
        int num_pre = pre.front();
        pre.pop();
        return num_pre;
    }
    
    int top() {
        int size = pre.size();
        size =  size-1;
        //弹出n-1个数字,然后重新压如
        while(size){
            int num = pre.front();
            pre.pop();
            pre.push(num);
            size--;
        }
        int num_pre = pre.front();
        pre.pop();
        pre.push(num_pre);
        return num_pre;
    }
    
    bool empty() {
        return pre.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-12-12 10:38  星光夜  阅读(20)  评论(0编辑  收藏  举报