Implement Queue using Stacks栈和队列--力扣101算法题解笔记

11.3Implement Queue using Stacks栈和队列

题目描述

用栈来实现队列。

输入输出样例

数据结构调用样例:

cpp 复制代码
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // returns 1
queue.pop(); // returns 1
queue.empty(); // returns false

题解

用两个栈来实现一个队列,达到先入先出的结果,所以必定要通过一个额外栈来翻转一次数组,这样让翻转过程既可以在插入时完成,也可以在取值时完成

cpp 复制代码
#include <iostream>
#include <stack>
using namespace std;

class MyQueue {
    stack<int> in, out;
public:
    MyQueue() {}

    void push(int x) {
        in.push(x);
    }

    int pop() {
        in2out();
        if (out.empty()) return -1; // 防御性编程:防止空队列弹出
        int x = out.top();
        out.pop();
        return x;
    }

    int peek() {
        in2out();
        if (out.empty()) return -1; // 防御性编程
        return out.top();
    }

    void in2out() {
        if (out.empty()) {
            while (!in.empty()) {
                int x = in.top();
                in.pop();
                out.push(x);
            }
        }
    }

    bool empty() {
        return in.empty() && out.empty();
    }
};

int main() {
    MyQueue queue;

    queue.push(1);
    queue.push(2);

    cout << "peek: " << queue.peek() << endl;   // 应输出 1
    cout << "pop: " << queue.pop() << endl;     // 应输出 1
    cout << "empty: " << (queue.empty() ? "false" : "true") << endl; // 应输出 false (因为还剩一个2)

    return 0;
}
相关推荐
@Mike@20 分钟前
02-数据库学习笔记(SQL引擎)
数据库·笔记·学习
六点_dn1 小时前
RabbitMQ学习笔记-定义与作用
笔记·学习·rabbitmq
战族狼魂2 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一2 小时前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH2 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
香辣牛肉饭3 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
迷途呀3 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
.徐十三.4 小时前
一篇文章看到最短路径——Dijkstra算法
算法
依然范特东4 小时前
动手学深度学习笔记--卷积层、微调
人工智能·笔记·深度学习