两个栈实现队列
时间:2022-07-24
本文章向大家介绍两个栈实现队列,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.思路
无论是两个栈实现一个队列还是两个队列实现一个栈,其实都是数据的来回倒
2.实现
先准备两个栈,pushStack ( 用来向里面添加数据的 ) popStack( 用来出数据的 )
package xmht.datastructuresandalgorithms.zsalgorithms;
/**
* @author shengjk1
* @date 2020/9/7
*/
import java.util.Stack;
/**
* 两个栈来实现队列
* <p>
* 1.pop 为空的时候才可能倒数据
* 2.倒数据时,把 push 中的数据一下子倒完
*/
public class TwoStacksQueue {
private Stack<Integer> pushStack;
private Stack<Integer> popStack;
public TwoStacksQueue() {
this.pushStack = new Stack();
this.popStack = new Stack();
}
public static void main(String[] args) {
TwoStacksQueue twoStacksQueue = new TwoStacksQueue();
twoStacksQueue.add(1);
twoStacksQueue.add(2);
twoStacksQueue.add(3);
System.out.println(twoStacksQueue.poll());
System.out.println(twoStacksQueue.poll());
}
//push 栈向 pop 栈倒数据
private void pushToPop() {
if (popStack.isEmpty()) {
while (!pushStack.isEmpty()) {
popStack.push(pushStack.pop());
}
}
}
public void add(int pushInt) {
pushStack.push(pushInt);
pushToPop();
}
public int poll() {
if (popStack.empty() && pushStack.empty()) {
throw new RuntimeException("Queue is empty!");
}
pushToPop();
return popStack.pop();
}
public int peek() {
if (popStack.empty() && pushStack.empty()) {
throw new RuntimeException("Queue is empty!");
}
pushToPop();
return popStack.peek();
}
}
- gitlab配置邮件通知功能操作记录
- 微信小程序价值思考:手机端的CS-BS迁移
- Linq2Sql数据实体外部更新时“不能添加其键已在使用中的实体”的解决办法
- 微信小程序:字体保持大小
- 在为知笔记中使用JQuery
- 在为知笔记中使用JQuery
- Python学习笔记(1):列表元组结构
- 6步创建一个通用机器学习模板
- Python学习笔记(2):数据库访问
- 学习Python语言,这些酷毙的工具你知道几个?
- Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录
- 免费体验国内首款写作机器人,就是这么溜!
- Python学习笔记(3):数据集操作-列的统一操作
- Python学习笔记(3):数据集操作-列的统一操作
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 实现ListView的点击变色的实例
- Android播放音乐案例分享
- linux crm部署代码详解
- Android自定义WaveProgressView实现水波纹加载需求
- CentOS8下的root密码快速修改方法
- Android开发之自定义刮刮卡实现代码
- Android ScrollView无法填充满屏幕的解决办法
- Android 监听屏幕是否锁屏的实例代码
- Android实现水波纹控件的方法
- Android中GridView布局实现整体居中方法示例
- Android SharedPreferences四种操作模式使用详解
- Ubuntu18.04下将 磁盘挂载在某目录下
- Android编程之绘图canvas基本用法示例
- Android 编译出错版本匹配问题解决办法
- Linux(CentOS7)使用 RPM 安装 mysql 8.0.11的教程