代码随想录算法训练营第10天| 232.用栈实现队列 ● 225. 用队列实现栈

发布时间 2023-09-15 21:02:16作者: zz子木zz

栈和队列

232.用栈实现队列

stack:

queue:

卡哥代码

一个入栈,一个出栈,即可模拟队列的pop操作

  • pop之前要检查出栈是否为空
    • 若为空,则排出入栈里所有的元素至出栈中
class MyQueue {
public:
    stack<int> stackIn;
    stack<int>  stackOut;
    
    MyQueue() {

    }
    
    void push(int x) {
        stackIn.push(x);
    }
    
    int pop() {
        if(stackOut.empty()){
            while( !stackIn.empty() ){
                stackOut.push(stackIn.top());
                stackIn.pop();
            }
        }
        int result = stackOut.top();
        stackOut.pop();
        return result;
        //return stackOut.pop();    //报错,因为标准的pop是void类型
    }
    
    int peek() {
        int result = this->pop();
        stackOut.push(result);
        return result;
    }
    
    bool empty() {
        return stackIn.empty() && stackOut.empty();
    }
};

225.用队列实现栈

queue:

卡哥代码

单队列法

class MyStack {
public:

    queue<int> que;

    MyStack() {

    }
    
    void push(int x) {
        que.push(x);
    }
    
    int pop() {
        int size = que.size();
        size--;
        while(size--){
            que.push(que.front());
            que.pop();
        }
        int result = que.front();
        que.pop();
        return result;
    }
    
    int top() {

        //简单写法
        return que.back();

        //简单写法
        // return this->back(); //报错:no member named 'back' in 'MyStack'
        
        /*我的写法
        int result = this->pop();
        this->push(result);
        return result;
        */ 
    }
    
    bool empty() {
        return que.empty();
    }
};