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

双栈实现一个队列

两个栈可实现将列表倒序:设有含三个元素的栈 A = [1,2,3] 和空栈 B = [] 。若循环执行 A 元素出栈并添加入栈 B ,直到栈 A 为空,则 A = [] , B = [3,2,1] ,即栈 B 元素为栈 A 元素倒序。

利用栈 B 删除队首元素:倒序后,B 执行出栈则相当于删除了 A 的栈底元素,即对应队首元素。

因此,可以设计栈 A 用于加入队尾操作,栈 B 用于将元素倒序,从而实现删除队首元素。

函数设计:

  1. 加入队尾 push() : 将数字 val 加入栈 A 即可。
  2. 获取队首元素 peek() :
    1. 当栈 B 不为空: B中仍有已完成倒序的元素,因此直接返回 B 的栈顶元素。
    2. 否则,当 A 为空: 即两个栈都为空,无元素,因此返回 -1 。
    3. 否则: 将栈 A 元素全部转移至栈 B 中,实现元素倒序,并返回栈 B 的栈顶元素。
  3. 弹出队首元素 pop() :
    1. 执行 peek() ,获取队首元素。
    2. 弹出 B 的栈顶元素。
  4. 队列判空 empty() : 当栈 A 和 B 都为空时,队列为空。

代码:

class MyQueue {private Stack<Integer> A;private Stack<Integer> B;public MyQueue() {A = new Stack<>();B = new Stack<>();}public void push(int x) {A.push(x);}public int pop() {int peek = peek();B.pop();return peek;}public int peek() {if (!B.isEmpty()) return B.peek();if (A.isEmpty()) return -1;while (!A.isEmpty()){B.push(A.pop());}return B.peek();}public boolean empty() {return A.isEmpty() && B.isEmpty();}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 新手小白的pytorch学习第一弹-------张量
  • 生成日志系统和监控
  • 算法·高精度
  • C++的介绍与认识
  • 用JavaScript将 NCR(Numeric Character Reference)标记转换为对应字符的方法
  • 对称加密和非对称加密解析
  • 关于力扣150题目——逆波兰表达式求值Java实现的三种解法
  • 如何写好品牌宣传稿提升品牌曝光?看这篇文章就够了
  • Java虚拟机(JVM):深入理解与性能调优
  • 如何在应用运行时定期监控内存使用情况
  • “LNMP环境搭建实战指南:从零开始配置CentOS 7下的Nginx、MySQL与PHP“
  • C# —— Directory类
  • Java 中的异常处理机制是如何工作的?请解释 try-catch-finally 的基本用法?
  • 如何远程访问运行电脑上运行的程序?
  • 【知网CNKI-注册安全分析报告】
  • 【译】理解JavaScript:new 关键字
  • C学习-枚举(九)
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • FastReport在线报表设计器工作原理
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript新鲜事·第5期
  • KMP算法及优化
  • Laravel 菜鸟晋级之路
  • LeetCode18.四数之和 JavaScript
  • mockjs让前端开发独立于后端
  • mysql常用命令汇总
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • REST架构的思考
  • Vue--数据传输
  • 阿里云前端周刊 - 第 26 期
  • 每天一个设计模式之命令模式
  • 目录与文件属性:编写ls
  • 区块链技术特点之去中心化特性
  • 学习笔记:对象,原型和继承(1)
  • 在weex里面使用chart图表
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • Linux权限管理(week1_day5)--技术流ken
  • 说说我为什么看好Spring Cloud Alibaba
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • # 透过事物看本质的能力怎么培养?
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (补充)IDEA项目结构
  • (二)构建dubbo分布式平台-平台功能导图
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (六)vue-router+UI组件库
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (一)springboot2.7.6集成activit5.23.0之集成引擎