【LeetCode-简单题KMP】232. 用栈实现队列

文章目录

题目

方法一:用输入栈和输出栈模拟队列

  1. 只有输出栈为空的时候才能将输入栈的元素补充到输出栈,
  2. 否则输出栈不为空,如果再从输入栈往输出栈填充元素,就会弄乱队列的先进先出规则,
  3. 而且当输出栈为空需要从输入栈补充元素时,必须一次性将输入栈的元素都弹出并且加到输出栈
java 复制代码
class MyQueue {
    Stack<Integer> inStack;//入栈
    Stack<Integer> outStack;//出栈
    public MyQueue() {
          inStack = new Stack<>();
          outStack = new Stack<>();
    }
    //入队
    public void push(int x) {
        inStack.push(x);
    }
    //出队
    public int pop() {
        dumpstackIn(); // 如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
        return outStack.pop();
    }
    //队首元素
    public int peek() {
        dumpstackIn(); // 如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
        return outStack.peek();
    }
    //判空
    public boolean empty() {
     return inStack.isEmpty() && outStack.isEmpty();
    }

    // 如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
    private void dumpstackIn(){
        if (!outStack.isEmpty()) return; //如果输出栈 有元素  则不需要将输入栈的元素放到输出栈
        while (!inStack.isEmpty()){ //否则 输出栈没有元素,那么当执行pop 或peek的时候 ,就需要把输入栈的元素逆序放到输出栈供pop 或peek使用
                outStack.push(inStack.pop());
        }
    }
}

/**
 * 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();
 * boolean param_4 = obj.empty();
 */
相关推荐
yxc_inspire1 分钟前
Java学习第二天
java·面向对象
毕设源码-赖学姐3 分钟前
【开题答辩全过程】以 基于net超市销售管理系统为例,包含答辩的问题和答案
java
昀贝13 分钟前
IDEA启动SpringBoot项目时报错:命令行过长
java·spring boot·intellij-idea
roman_日积跬步-终至千里44 分钟前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
野犬寒鸦1 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
wenzhangli71 小时前
ooderA2UI BridgeCode 深度解析:从设计原理到 Trae Solo Skill 实践
java·开发语言·人工智能·开源
霖霖总总1 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法
HalvmånEver1 小时前
Linux:线程互斥
java·linux·运维
rainbow68891 小时前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法
灵感菇_1 小时前
Java 锁机制全面解析
java·开发语言