Java中栈和队列如何相互转换
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章将为大家详细讲解有关Java中栈和队列如何相互转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。
千家信息网最后更新 2025年11月14日Java中栈和队列如何相互转换
这篇文章将为大家详细讲解有关Java中栈和队列如何相互转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。
用栈实现队列-力扣232题
题目要求:仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作
使用双栈来实现队列,我们就可以让一个栈储存具体元素,另一个栈做辅助
上图可以看到,新元素进栈时,要确保该栈为空。进入栈的元素按顺序存到辅助栈中,等新元素进入栈之后,再将辅助栈中的元素按顺序出到该栈中。这样操作之后,栈中元素存放的顺序就和队列的一样啦
代码实现:
//双栈模拟队列public class MyQueue{ //实际存储元素的栈 private Stack s1 = 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 Queue q1 = 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 Queue queue = 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安全错误
数据库的锁怎样保障安全
电信数据库备份半年
软件开发需求分析如何入手
软件开发好就可以用了吗
武汉怎样打车软件开发
新型经济与网络安全
数据库触发器实现自动更新
如何为pc安装plex服务器
服务器断开连接未发送数据
数据库开发应用场景
为什么网络安全法施行不打击骚扰
软件开发的难度系数
什么时候定义软件开发模型
千锋网络安全全套笔记
电信网络安全龙头
java 面试题 数据库
时序数据库的公司
决胜制高点网络安全
昆山爱图客软件开发有限公司
计算机网络技术怎么用
湖南服务器维修调试费用
数据库中的数据定义包括什么
昆明专业的网络安全机构
sql数据库去重复
青岛万吐网络技术有限公司
股票软件开发山东
家庭服务器管理智能设备
互联网软件开发工程师怎么样
绿色数据库图标
数据库建模能力
网络安全密匙输不进去