232. 用栈实现队列 和 225. 用队列实现栈

176 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

232. 用栈实现队列 和 225. 用队列实现栈

  • 题号:力扣232力扣225
  • 知识点:栈,队列,模拟
  • 目标完成度:67/150
  • 总结

1. 总体思路:

  • 1.用栈模拟队列,使用两个栈,不断倒腾。
  • 2.用队列模拟栈,使用两个队列,其中一个是备份。

2. 用栈实现队列:

  • 1.push:直接压入栈A
  • 2.pop:如果栈B为空,把栈A中的所有元素pop然后push到栈B。然后栈B pop。
  • 3.peek:复用pop,但是不能删除这个元素,要再加到栈里
  • 4.empty:如果栈A和栈B都为空则true 在这里插入图片描述
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 res = stOut.top();
        stOut.pop();
        return res;
    }
    
    int peek() {
        int res = this->pop();
        stOut.push(res);
        return res;
    }
    
    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();
 */

2. 用队列实现栈:

  • 1.push:直接压入队列A
  • 2.pop:将队列A中的元素转移到队列B中,最后一个除外,然后返回最后一个元素,清空队列A,再把队列B中的元素放到队列A中,再清空队列B
  • 3.top:调用队列A.back接口
  • 4.empty:如果队列A空则true
  • 5.从以上可以看出队列B就是一个备份临时存放的作用 在这里插入图片描述
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 res = que1.front();
        que1.pop();
        que1 = que2;
        while(!que2.empty()){
            que2.pop();
        }
        return res;
    }
    
    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();
 */