【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();
 */
相关推荐
土司大王8 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
sali-tec8 小时前
C# 基于OpenCv的视觉工作流-章106-差值追踪
图像处理·人工智能·opencv·算法·计算机视觉
Navigator_Z8 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
手写码匠9 小时前
Dify 多 Agent 工具权限与安全沙箱实战:让智能体“有能力,但不越权“
人工智能·深度学习·算法·aigc
黎阳之光9 小时前
打破堆场感知黑盒:黎阳之光视频孪生,构建港口码头网格化透明管控新体系
大数据·人工智能·算法·安全·数字孪生
丘山一郎9 小时前
Spring 中的IOC控制反转 和DI依赖注入
java·后端·spring
码视野9 小时前
基于 Spring Boot + Vue3 的【大学英语四六级 (CET-4/6) 作文智能评分与句式润色系统】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端·vue3
MetaLite9 小时前
Spring-AOP自调用为什么失效-AopContext真能解决吗
java·后端·spring
大模型码小白9 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
许彰午10 小时前
14-字段级SM4加密与SM2签名
java·低代码·架构