实现两个栈模拟队列

news2024/11/24 17:29:11

实现两个栈模拟队列

思路:可以想象一下左手和右手,两个栈:stack1(数据所在的栈) ,stack2(临时存放)。
入队:需要将入队 num 加在 stack1 的栈顶即可;
出队:这个就会麻烦点,需要用到临时栈stack2。先将 stack1中的所有元素放到 stack2中,再把stack2的顶部元素弹出一个,再把 stack2中的元素放回到stack1中,切记!不要忘了把stack2中的元素放回到stack1中!!!

代码如下:

import java.util.Scanner;
import java.util.Stack;

/**
 * @author: Arbicoral
 * @Description: 两个栈模拟队列
 */
public class StackSimulateQueue {
    private static Stack<Integer> stack1 = new Stack<>();
    private static Stack<Integer> stack2 = new Stack<>();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入要入队列的数(以-1结束):");
        while (true){
            if (sc.hasNextInt()){
                int next = sc.nextInt();
                if (next == -1){
                    break;
                } else {
                    stack1.push(next);
                }
            }
        }

        // 测试
        StackSimulateQueue ssq = new StackSimulateQueue();
        ssq.print();// 打印当前队列中的值
        ssq.push(356);//入队
        ssq.poll();//出队
        ssq.print();
        ssq.poll();
        ssq.poll();
        ssq.print();
        ssq.poll();
        ssq.print();
        ssq.poll();
    }

    // 出队列:先把 stack1中的所有元素放到 stack2中,再把stack2的顶部元素弹出,还需要再把 stack2中的元素放回到stack1中
    public void poll(){
        if (stack1.isEmpty()){
            System.out.println("队列中空空如也~~");
        }
        while (!stack1.isEmpty()){
            stack2.push(stack1.pop());
        }
        System.out.println("出队:" + stack2.pop());
        while (!stack2.isEmpty()){
            stack1.push(stack2.pop());
        }
    }

    // 入队列:需要将新添加的数据压入 stack1底部,即,先把 stack1 -> stack2,再把 num放到stack1,stack2 -> stack1
    // 入队列:直接放到 stack1顶部即可
    public void push(Integer num){
        System.out.println("入队:" + num);
        stack1.push(num);
    }

    // 打印当前队列
    // 注意:应该先将 stack1中的元素放到 stack2中,stack2弹出一个存一个,打印后放回 stack1中
    public void print(){
        System.out.print("当前队列中有:");
        while (!stack1.isEmpty()){
            stack2.push(stack1.pop());
        }
        // 放回stack1
        while (!stack2.isEmpty()){
            int temp = stack2.pop();
            System.out.print(temp + "\t");
            stack1.push(temp);
        }
        System.out.println();
    }
}

示例:

输入:12 32 53 67 2 5 7 -1
输出:
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/902299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

plt绘制箱型图+散点图

import numpy as np import matplotlib.pyplot as plt# 创建示例数据 np.random.seed(1) data [np.random.normal(0, std, 100) for std in range(1, 4)]# 绘制箱型图 plt.boxplot(data, patch_artistTrue,zorder0)# 添加数据点的散点图&#xff0c;并设置参数以避免重叠 for …

[四次挥手]TCP四次挥手握手由入门到精通(知识精讲)

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

Pytorch的torch.utils.data中Dataset以及DataLoader等详解

在我们进行深度学习的过程中&#xff0c;不免要用到数据集&#xff0c;那么数据集是如何加载到我们的模型中进行训练的呢&#xff1f;以往我们大多数初学者肯定都是拿网上的代码直接用&#xff0c;但是它底层的原理到底是什么还是不太清楚。所以今天就从内置的Dataset函数和自定…

【Go】Go 文本匹配 - 正则表达式基础与编程中的应用 (8000+字)

正则表达式&#xff08;Regular Expression, 缩写常用regex, regexp表示&#xff09;是计算机科学中的一个概念&#xff0c;很多高级语言都支持正则表达式。 目录 何为正则表达式 语法规则 普通字符 字符转义 限定符 定位符 分组构造 模式匹配 regexp包 MatchString…

websocker无法注入依赖

在公司中准备用websocker统计在线人数&#xff0c;在WebSocketServer使用StringRedisTemplate保存数据到redis中去&#xff0c;但是在保存的时候显示 StringRedisTemplate变量为null 详细问题 2023-08-20 10:37:14.109 ERROR 28240 --- [nio-7125-exec-1] o.a.t.websocket.po…

【AI】文心一言的使用

一、获得内测资格&#xff1a; 1、点击网页链接申请&#xff1a;https://yiyan.baidu.com/ 2、点击加入体验&#xff0c;等待通过 二、获得AI伙伴内测名额 1、收到短信通知&#xff0c;点击链接 网页Link&#xff1a;https://chat.baidu.com/page/launch.html?fa&sourc…

LeetCode_Java_2236. 判断根结点是否等于子结点之和

2236. 判断根结点是否等于子结点之和 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。 示例1 输入&#xff1a;roo…

【CMake保姆级教程】CMake的使用

文章目录 前言CMake的使用注释注释行注释块 CMake操作共处一室VIP 包房 前言 在上节课我们已经讲了CMake的安装和简单使用&#xff0c;本节课我们来讲解CMake的命令和他的含义 CMake的使用 CMake支持大写、小写、混合大小写的命令。如果在编写CMakeLists.txt文件时使用的工具…

vue3中的router和useRouter的区别

结论&#xff1a;从vue-router的官方文档中发现&#xff0c;useRouter需要在setup中使用&#xff0c;而router可以在任何组件中使用。二者是等价的&#xff0c;适用场景不同。 问题&#xff1a;使用useRouter创建的实例&#xff0c;未能成功调用方法push()。会报错&#xff1a;…

gdb 常用命令

gdb 常用命令 文章目录 gdb 常用命令gdb 调试一般步骤常用命令infostep、next、continue、finish、untilexaminebreakinfo 、enable、disable和delete命令 backtrace和framebacktraceframe listprintwhatis和ptypethreadnext、stepreturn、finishuntiljumpdisassembleset args …

攻防世界-can_has_stdio?

原题 解题思路 这使用的是brainfuck语言&#xff0c;语言介绍如下&#xff1a;Brainfuck详解。 使用网站解码即可&#xff1a;CTF在线工具。

《HeadFirst设计模式(第二版)》第十一章代码——代理模式

代码文件目录&#xff1a; RMI&#xff1a; MyRemote package Chapter11_ProxyPattern.RMI;import java.rmi.Remote; import java.rmi.RemoteException;public interface MyRemote extends Remote {public String sayHello() throws RemoteException; }MyRemoteClient packa…

前端Vue自定义等分底部菜单导航按钮 自适应文字宽度 可更改组件位置

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

Windows 平台下微软开发的神器 PowerToys 使用笔记

文章目录 Part.I IntroductionPart.II 安装Part.III 常用操作Chap.I 快捷键Chap.II 分屏示例 Reference Part.I Introduction PowerToys 是一款来自微软的系统增强工具&#xff0c;就像是一个神奇的 Win10 外挂&#xff0c;整套软件由若干子组件构成&#xff0c;包括&#xff…

从零开始创建 Spring Cloud 分布式项目,不会你打我

目录 一、Spring Cloud 和 分布式 二、创建新项目 三、导入 Spring Cloud 依赖 四、配置 Spring Cloud 一、Spring Cloud 和 分布式 Spring Cloud是一个基于Spring框架的开源微服务框架&#xff0c;它提供了一系列工具和组件&#xff0c;用于帮助开发人员构建分布式系统中…

EndNote极简入门【如何使用】

在开始菜单栏打开&#xff1a; &#xff08;点左下角忽略即可&#xff09; 第一次打开呢就如下图所示&#xff1a; 空白的&#xff0c;只有一个灰色的界面&#xff1a; 新建一个自己库&#xff1a; 然后就会弹出东西啦&#xff1a; 导出endnote学术期刊的引文&#xff1a;&…

人工智能时代未来程序员必备的三大利器:异,理,说

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Python学习:迭代器与生成器的深入解析

函数在Python中扮演着重要角色&#xff0c;不仅可以封装代码逻辑&#xff0c;还能通过迭代器和生成器这两种强大的技术&#xff0c;实现更高效的数据处理和遍历。本篇博客将深入探讨Python函数的迭代器和生成器&#xff0c;结合实际案例为你揭示它们的神奇&#xff0c;以及如何…

《论文阅读18》 SSD: Single Shot MultiBox Detector

一、论文 研究领域&#xff1a; 2D目标检测论文&#xff1a;SSD: Single Shot MultiBox Detector ECCV 2016 论文链接论文github 二、论文概要 SSD网络是作者Wei Liu在ECCV 2016上发表的论文。对于输入尺寸300x300的网络 使用Nvidia Titan X在VOC 2007测试集上达到74.3%mA…

无涯教程-PHP - 条件判断

if... elseif ... else和switch语句用于根据不同条件进行判断。 您可以在代码中使用条件语句来做出决定&#xff0c; PHP支持以下三个决策语句- if ... else语句 - 如果要在条件为真时执行&#xff0c;而在条件不为真时执行另一个代码&#xff0c;请使用此语句 els…