LeetCode刷题记录.Day22

用栈实现队列

232. 用栈实现队列 - 力扣(LeetCode)

class MyQueue {
public:
    stack<int> stIn;
    stack<int> stOut;
    MyQueue() {

    }
    
    void push(int x) {
        stIn.push(x);
    }
    
    int pop() {
        if(stOut.empty()){
            while(!stIn.empty()){
                stOut.push(stIn.top());
                stIn.pop();
            }
        }
        int result = stOut.top();
        stOut.pop();//移除操作
        return result;
    }
    
    int peek() {
        int result = this->pop();
        stOut.push(result);//不需要移除,加回去
        return result;
    }
    
    bool empty() {
        return stIn.empty() && stOut.empty();
    }
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue* obj = new MyQueue();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->peek();
 * bool param_4 = obj->empty();
 */

 

用队列实现栈

225. 用队列实现栈 - 力扣(LeetCode)

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

    }
    
    void push(int x) {
        que1.push(x);
    }
    
    int pop() {
        int size = que1.size();
        size--;//缩小一位保留队尾
        while(size--){
            que2.push(que1.front());
            que1.pop(); 
        }//保留队尾那一个元素
        int result = que1.front();//剩下的就是队尾元素
        que1.pop();                 //移除这个队尾元素
        que1 = que2;               // 再将que2赋值给que1
        while(!que2.empty()){
            que2.pop(); 
        }//que2置空
        return result;
    }
    
    int top() {
        return que1.back();
    }
    
    bool empty() {
        return que1.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 @ 2022-11-21 22:40  凱風快晴  阅读(22)  评论(0)    收藏  举报