当前位置: 首页 > news >正文

LeetCode225.用队列实现栈

LeetCode225.用队列实现栈

文章目录

  • LeetCode225.用队列实现栈
    • 题目描述
    • 实现1:
    • 实现2:

题目描述

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

实现1:

入栈:把数据push到主队列

出栈:把主队列中n-1个数据导入到副队列,主队列只剩下最后进入的元素,出队即可(模拟后进先出)

top:栈顶元素就是主队列的队尾(back)

判空:判断主队列是否为空

image-20250226182544734

代码:

class MyStack {
public:
    MyStack() {

    }
    
    void push(int x) {
        main_q.push(x);
    }
    
    int pop() {
        //先导入到辅助栈
        while(main_q.size() > 1)
        {
            aux_q.push(main_q.front());
            main_q.pop();
        }
        int pop_value = main_q.front();       //记录pop的元素
        main_q.pop();//把最后一个元素出队   -> 实现出栈效果

        //然后把数据导回去
        while(!aux_q.empty())
        {
            main_q.push(aux_q.front());
            aux_q.pop();
        }

        return pop_value;
    }
    
    int top() {
        return main_q.back();
    }
    
    bool empty() {
        return main_q.empty();
    }   
private:
    queue<int> main_q;
    queue<int> aux_q;
};

实现2:

  • 入栈:先将元素入队到副队列,再将主队列的全部元素依次出队并入队到副队列。副队列的front就是新入栈的元素。然后将主队列和副队列交换(保持副队列为空),主队列的元素就是栈内的元素。主队列的front就是栈顶,back就是栈底。

  • 出栈:主队列出队

  • 取栈顶:主队列的front

  • 判空:主队列是否为空

代码:

class MyStack {
public:
    MyStack() {}

    void push(int x) {
        // 先push到副队列
        aux_q.push(x);
        // 主队列的元素push到副队列
        while (!main_q.empty()) {
            aux_q.push(main_q.front());
            main_q.pop();
        }
        // 此时主队列为空,主队列和副队列交换
        main_q.swap(aux_q);
    }

    int pop() {
        int pop_val = main_q.front();
        main_q.pop();
        return pop_val;
    }

    int top() { return main_q.front(); }

    bool empty() { return main_q.empty(); }

private:
    queue<int> main_q;
    queue<int> aux_q;
};

相关文章:

  • unity学习55:按钮 button
  • 基于DeepSeek的智能客服系统安全与隐私保护:构建可信赖的服务
  • react native中如何实现吸顶的效果
  • 《ArkTS鸿蒙应用开发入门到实战》—新手小白学习鸿蒙的推荐工具书!
  • 一键部署DeepSeek
  • 明晚见:快速上手 IoTDB 树表双模型,功能/场景直播详解!
  • 高效能计算与高速数据传输的完美结合:飞腾D2000处理器与复旦微双FPGA集成主板
  • 物联网+大数据,智慧公租房管理系统构建未来社区
  • 刷题记录 HOT100 子串-1:560. 和为 K 的子数组
  • 前端关于Cursor编辑器的了解与深度使用及对工作的便利
  • c++之原始字符串字面量(raw string-literals)
  • AOP进阶-03.切入点表达式-execution
  • LeetCode 热题100 226. 翻转二叉树
  • 【智能优化算法】文献阅读总结
  • IDE/Mermaid + VSCode + Deepseek 生成可视化流程图和UML图
  • 认证与授权#1#Token和Cookie验证方式对比
  • 二、IDE集成DeepSeek保姆级教学(使用篇)
  • 【AIGC系列】3:Stable Diffusion模型介绍
  • 文件缓冲区
  • ABC 394
  • 国务院办公厅印发《国务院2025年度立法工作计划》
  • 经济日报整版聚焦:上海构建法治化营商环境,交出高分答卷
  • 共情场域与可持续发展——关于博物馆、美术馆运营的新思考
  • 乌方:泽连斯基只接受与普京会谈,拒见其他俄代表
  • 城市轨道交通安全、内河港区布局规划、扎实做好防汛工作……今天的上海市政府常务会议研究了这些重要事项
  • 国家发改委:美芯片药品等领域关税影响全球科技发展,损害人类共同利益