用队列实现栈

leetcode

题目描述

使用队列实现栈的下列操作:

  • push(x) -- 元素 x 入栈
  • pop() -- 移除栈顶元素
  • top() -- 获取栈顶元素
  • empty() -- 返回栈是否为空


解题思路

  1. 可以使用两个队列
  2. 也可以使用一个队列,我们在此只讲述双队列
    • 当使用队列实现栈时,另一个队列发挥着临时存储的作用
    • 队列先进先出栈先进后出的特性要理解


最终代码

class MyStack {
public:
    queue<int> queueOne;
    queue<int> queueTwo;

    MyStack() {

    }
    
    void push(int x) {
        queueOne.push(x);
    }
    
    int pop() {
        int size = queueOne.size();
        // 为了在queueOne中留下一个
        size--;

        while (size--) {
            // 将queueOne的数据全部临时存储到queueTwo中
            queueTwo.push(queueOne.front());
            queueOne.pop();
        }
        // 返回结果
        int result = queueOne.front();
        queueOne.pop();
        // 将queueTwo赋值给queueOne
        queueOne = queueTwo;
        // 清空queueTwo
        while (!queueTwo.empty()) {
            queueTwo.pop();
        }
        return result;
    }
    
    int top() {
        return queueOne.back();
    }
    
    bool empty() {
        return queueOne.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();
 */
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容