两个栈实现队列(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),因为每个元素只被移动一次。整体上,该算法高效地利用了栈的后入先出特性来实现了队列的先进先出特性。

相关推荐
1024奇点5 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Csvn5 小时前
WASM
前端
Warren2Lynch6 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
天河归来6 小时前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
Knight_AL6 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
修己xj7 小时前
我用 AI 给自己写了一个 Markdown 编辑器,然后把它开源了
前端
ZhengEnCi7 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
FRing037 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
罗西的思考7 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
幸运小猿7 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html