两个栈实现队列(D)

java 复制代码
import java.util.Stack;

public class TwoStackQueue {
    private Stack<Integer> stackPush;
    private Stack<Integer> stackPop;

    public TwoStackQueue() {
        stackPush = new Stack<Integer>();
        stackPop = new Stack<Integer>();
    }

    private void pushToPop() {
        if (stackPop.empty()) {
            while (!stackPush.empty()) {
                stackPop.push(stackPush.pop());
            }
        }
    }

    public void add(int pushInt) {
        stackPush.push(pushInt);
        pushToPop();
    }

    public int poll() {
        if (stackPop.empty() && stackPush.empty()) {
            throw new RuntimeException("Queue is empty!");
        }
        pushToPop();
        return stackPop.pop();
    }

    public int peek() {
        if (stackPop.empty() && stackPush.empty()) {
            throw new RuntimeException("Queue is empty!");
        }
        pushToPop();
        return stackPop.peek();
    }

    public static void main(String[] args) {
        TwoStackQueue queue = new TwoStackQueue();
        queue.add(1);
        queue.add(2);
        queue.add(3);
        System.out.println(queue.poll());
        System.out.println(queue.peek());
        System.out.println(queue.poll());

    }
}

这个算法通过两个栈结构巧妙地模拟了一个队列的行为,其中stackPush用于处理入队操作,而stackPop用于处理出队操作。当需要出队时,算法会检查stackPop是否为空,如果为空,则将stackPush中的所有元素逆序转移到stackPop中,从而确保stackPop的栈顶元素是队列的头部元素。这种方法使得入队操作的时间复杂度为O(1),而出队操作在最坏情况下的时间复杂度为O(n),但平均时间复杂度仍为O(1),因为每个元素只被移动一次。整体上,该算法高效地利用了栈的后入先出特性来实现了队列的先进先出特性。

相关推荐
linx295几秒前
单元七 · 零基础路线图-第 1–3 周·变量、类型与字符串
c语言·开发语言·数据结构·c++·算法
Zzzzmo_3 分钟前
SpringBoot 日志
java·spring boot·spring
Benny_Tang3 分钟前
P7514 [省选联考 2021 A/B 卷] 卡牌游戏 题解
c++·算法
晚安日记wanna4 分钟前
简历写精通浏览器原理一问 URL 到渲染直接哑火...
前端·面试
hai_android6 分钟前
Android JNI 示例详解:Java 与 C++ 互调演示
android·java
geovindu8 分钟前
java: Strategy Pattern
java·开发语言·后端·设计模式·策略模式·行为模式
晚安日记wanna8 分钟前
四年前端被问 Code Review90人只看得懂空格和命名
前端·面试
residual_fan10 分钟前
经验模态重构:直向工业时间序列数据的数据扩增方法
人工智能·算法·重构·数据挖掘·数据分析
IPdodo_13 分钟前
curl 如何测试代理 IP?HTTP、SOCKS5 与认证参数示例
前端·网络·python·https·网络调试
念越13 分钟前
Python基础语法(一):变量、类型与程序控制流
开发语言·网络·python