当前位置: 首页 > news >正文

实现两个栈模拟队列

实现两个栈模拟队列

思路:可以想象一下左手和右手,两个栈: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());}// 放回stack1while (!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.lryc.cn/news/131470.html

相关文章:

  • 无涯教程-TensorFlow - 单词嵌入
  • Facebook AI mBART:巴别塔的硅解
  • BDA初级分析——SQL清洗和整理数据
  • 汽车后视镜反射率测定仪
  • Redis学习笔记
  • 韩顺平Linux 四十四--
  • 【支付宝小程序】分包优化教程
  • 语言基础2 矩阵和数组
  • springMVC中过滤器抛出异常,自定义异常捕获
  • 图像检索技术研究:深度度量与深度散列在相似性学习中的应用比较与实践 - 使用Python与Jupyter环境
  • CSS加载失败的6个原因
  • react之路由的安装与使用
  • 基于RoCE的应用程序的MTU注意事项
  • springboot集成Graphql相关问题汇总
  • Angular16的路由守卫基础使用
  • leetcode228. 汇总区间
  • 删除有序链表中重复的元素-II(链表)
  • element单独检验form表单中的一项
  • Webpack node、output.jsonpFunction 配置详解
  • 要跟静音开关说再见了!iPhone15新变革,Action按钮引领方向
  • 论文笔记 Graph Attention Networks
  • 看上去就很像的agree和degree有什么联系
  • 2023前端面试题第二弹(真实,一般人我还不给看)
  • 零基础如何学习 Web 安全,如何让普通人快速入门网络安全?
  • 安全学习DAY18_信息打点-APP资产搜集
  • react 矩形波浪
  • 【GitHub】Pycharm本地项目打包上传到Github仓库的操作步骤
  • 计算机网络基础
  • 【图像分类】基于LIME的CNN 图像分类研究(Matlab代码实现)
  • 回归预测 | MATLAB实现TSO-SVM金枪鱼群算法优化支持向量机多输入单输出回归预测(多指标,多图)