Java中栈和队列如何相互转换
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章将为大家详细讲解有关Java中栈和队列如何相互转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。
千家信息网最后更新 2025年02月01日Java中栈和队列如何相互转换
这篇文章将为大家详细讲解有关Java中栈和队列如何相互转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。
用栈实现队列-力扣232题
题目要求:仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作
使用双栈来实现队列,我们就可以让一个栈储存具体元素,另一个栈做辅助
上图可以看到,新元素进栈时,要确保该栈为空。进入栈的元素按顺序存到辅助栈中,等新元素进入栈之后,再将辅助栈中的元素按顺序出到该栈中。这样操作之后,栈中元素存放的顺序就和队列的一样啦
代码实现:
//双栈模拟队列public class MyQueue{ //实际存储元素的栈 private Stacks1 = new Stack<>(); //辅助栈 private Stack s2 = new Stack<>(); public MyQueue() { } //将元素 x 推到队列的末尾 public void push(int x) { if (s1.empty()){//栈为空,直接放入x s1.push(x); }else { //此时不为空 //先把s1所有元素弹出放入s2 while (!s1.empty()){ s2.push(s1.pop());//s2放入的值就是s2弹出的值 //以下两句和上一句相同// int val = s1.pop();// s2.push(val); } //将新元素直接放入s1,此时新元素就处在s1的栈顶 s1.push(x); //再次将s2的所有值依次弹出放入s1 while (!s2.empty()){ s1.push(s2.pop()); } } } //从队列的开头移除并返回元素 public int pop() { return s1.pop(); } //返回队列开头的元素 public int peek() { return s1.peek(); } //判断队列是否为空 public boolean empty() { return s1.empty(); }}
用队列实现栈-力扣225题
题目要求:仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作
1. 双队列实现栈
使用双队列实现栈, q1是存储元素的队列,保证q2添加元素之后永远为空队列(新元素直接入q2),保证新元素处在队首。这样的话,新元素入队之后,另外一个队列的元素依次出队然后入队,这样就实现了一个栈。
代码实现:
public class MyStack { //q1是存储元素的队列 private Queueq1 = new LinkedList<>(); //q2是辅助队列 //添加元素后保证q2永远为空 private Queue q2 = new LinkedList<>(); public MyStack () { } //将元素 x 压入栈顶 public void push(int x) { //新入队元素直接入q2,成为q2队首 q2.offer(x); //将q1中的所有元素依次出队,入q2 while (!q1.isEmpty()){ q2.offer(q1.poll()); } //q1为空,q2为存储元素的队列,互换引用指向 //互换之后,q1任然是存储元素的队列,q2为空 Queue temp = q1; q1 = q2; q2 = temp; } // 移除并返回栈顶元素 public int pop() { return q1.poll(); } //返回栈顶元素 public int top() { return q1.peek(); } //判断栈是否为空 public boolean empty() { return q1.isEmpty(); }}
2.一个队列实现栈
先将元素入队,再将之前的元素依次出队再入队即可!也就是说,保证新元素在队首
代码实现:
public class MyStack { private Queuequeue = new LinkedList<>(); public MyStack() { } public void push(int x) { //记录之前元素的个数 int size = queue.size(); //将新元素入队 queue.offer(x); //将之前的元素依次出队再入队,新元素就在队首位置 for (int i = 0; i < size; i++) { queue.offer(queue.poll()); } } public int pop() { return queue.poll(); } public int top() { return queue.peek(); } public boolean empty() { return queue.isEmpty(); }}
这几个例题实践目的是更加熟悉的掌握和了解栈和队列,实际应用中是不推荐的哦。
关于"Java中栈和队列如何相互转换"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
元素
队列
存储
辅助
保证
代码
篇文章
顺序
支持
相同
两个
处在
实际
开头
更多
题目
先出
接入
不错
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
日本网络安全管理局
接入海康存储服务器需要哪些要求
医疗数据库发展
软件开发可以不给预付款吗
全国手机号码数据库下载
c 服务器开发月薪
山西it软件开发
无服务器程序安全
玉田媒体网络技术售后服务
上海一站式软件开发外包
服务器怎么备份数据库
苹果升级15后服务器登录不上
域控服务器搭建后设置
数据库保护是什么意思
雷电网络技术
学网络安全好就业吗
服务器硬盘三色灯
小平台软件开发
吐鲁番ibm服务器维保费用
服务器黑屏
天星餐饮软件开发
网络安全服务器是什么
济南巨淘网络技术
action对魔忍服务器错误
高校网络安全宣传周报道
软件开发的项目清单
网络安全法律法规培训目的
湖南网络技术服务
宣城市对网络安全
天猫网络安全工程师