一则有趣的算法题:两个栈实现一个队列

简介: 一则有趣的算法题:两个栈实现一个队列

题目:如题,就是用两个栈实现队列的特性

网络异常,图片无法展示
|


1 基本架构

首先我们声明两个栈和自定义队列的基本结构、功能

static class MyQueue<E> {
    /**
     * 首先声明两个栈
     */
    public Stack stack1 = new Stack<E>();
    public Stack stack2 = new Stack<E>();
    /**
     * 添加操作
     * @param e
     */
    public void push(E e) {
    }
    /**
     * 弹出操作
     * @return
     */
    public E pop() {
        return (E) stack2.pop();
    }
}
复制代码


2 实现思路

网络异常,图片无法展示
|


3 具体实现

接下来我们按步骤进行编码

static class MyQueue<E> {
    /**
     * 首先声明两个栈
     */
    public Stack stack1 = new Stack<E>();
    public Stack stack2 = new Stack<E>();
    /**
     * 添加操作
     *
     * @param e
     */
    public void push(E e) {
        //将元素压入stack1
        stack1.push(e);
    }
    /**
     * 弹出操作
     *
     * @return
     */
    public E pop() {
        //如果stack2为空,将stack1元素全部放入stack2
        if (stack2.isEmpty()) {
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
            //如果不为空,直接弹出
        } else {
            return (E) stack2.pop();
        }
        //全部为空时抛出异常
        if (stack1.isEmpty() && stack2.isEmpty()) {
            throw new NoSuchElementException();
        }
        return (E) stack2.pop();
    }
}
复制代码


4 测试

public static void main(String[] args) {
    MyQueue<Integer> queue = new MyQueue<>();
    queue.push(1);
    queue.push(2);
    queue.push(3);
    System.out.println(queue.pop());
    System.out.println(queue.pop());
    queue.push(4);
    queue.push(5);
    System.out.println(queue.pop());
}
复制代码


运行结果:

网络异常,图片无法展示
|


测试结果是严格按照先进先出来执行



相关文章
|
21天前
|
缓存 监控 算法
内网监控管理软件:PHP 语言队列算法揭秘
在数字化办公环境中,内网监控管理软件对企业的稳定运行和信息安全至关重要。本文深入介绍PHP中的队列算法及其在内网监控软件中的应用,包括监控数据收集、任务调度和日志记录等场景,通过代码示例展示其实现方法。队列算法可提高性能、保证数据顺序并实现异步处理,为企业提供高效的安全保障。
23 1
|
3月前
|
算法
【算法】栈
栈相关算法题,供参考,附有链接地址及板书
|
5月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
214 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
5月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
87 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
4月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
5月前
|
算法
数据结构与算法二:栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式
这篇文章讲解了栈的基本概念及其应用,并详细介绍了中缀表达式转换为后缀表达式的算法和实现步骤。
105 3
|
5月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
60 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
5月前
|
算法 数据挖掘
【栈和队列】算法题 ---- 力扣(二)
【栈和队列】算法题 ---- 力扣
|
5月前
|
存储 算法
【栈和队列】算法题 ---- 力扣(一)
【栈和队列】算法题 ---- 力扣
|
5天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。

热门文章

最新文章