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

【✅面试编程题:如何用队列实现一个栈】

✅面试编程题:如何用队列实现一个栈

  • 💡典型回答

💡典型回答

使用两个队列可以实现一个栈,一个队列用来存储栈中的元素,另一个队列用来在pop操作时暂存元素。

上才艺:

import java.util.LinkedList;
import java.util.Queue;public class MyStack<T> {private Queue<T> queue; // 主队列private Queue<T> tempQueue; // 辅助队列public MyStack() {queue = new LinkedList<>();tempQueue = new LinkedList<>();}// 添加元素到栈顶public void push(T element) {queue.offer(element);}// 弹出栈顶元素并返回public T pop() {if (isEmpty()) {throw new RuntimeException("stack is empty");}// 将主队列中除了最后一个元素外的所有元素移到辅助队列中while (queue.size() > 1) {tempQueue.offer(queue.poll());}T element = queue.poll(); // 获取最后一个元素Queue<T> temp = queue; // 交换主队列和辅助队列的引用queue = tempQueue;tempQueue = temp;return element;}// 获取栈顶元素但不弹出public T peek() {if (isEmpty()) {throw new RuntimeException("stack is empty");}// 将主队列中除了最后一个元素外的所有元素移到辅助队列中while (queue.size() > 1) {tempQueue.offer(queue.poll());}T element = queue.poll(); // 获取最后一个元素tempQueue.offer(element); // 将最后一个元素放回主队列Queue<T> temp = queue; // 交换主队列和辅助队列的引用queue = tempQueue;tempQueue = temp;return element;}// 判断栈是否为空public boolean isEmpty() {return queue.isEmpty();}
}

其中,push方法用来入栈,直接将元素加入queue队列中。

pop方法用来出栈,先将queue队列中的元素倒入tempQueue队列中,直到queue队列中只有一个元素,将其弹出即可。

peek方法用来获取栈顶元素,与pop方法类似,只是在弹出元素之前需要先将其加入tempQueue队列中

isEmpty方法用来判断栈是否为空,如果queue队列为空,则栈为空。

这个实现的时间复杂度为O(n),空间复杂度为O(n),其中n为栈中元素的个数。

http://www.lryc.cn/news/260075.html

相关文章:

  • Windows本地的RabbitMQ服务怎么在Docker for Windows的容器中使用
  • YOLOv5改进 | 2023卷积篇 | AKConv轻量级架构下的高效检测(既轻量又提点)
  • 微信小程序:模态框(弹窗)的实现
  • uniapp交互反馈api的使用示例
  • XUbuntu22.04之HDMI显示器设置竖屏(一百九十八)
  • 如何用 Cargo 管理 Rust 工程系列 甲
  • Windows下ping IP+端口的方法
  • 【python】os.getcwd()函数详解和示例
  • Linux(二十一)——virtualenv安装成功之后,依然提示未找到命令(-bash: virtualenv: 未找到命令)
  • RNN介绍及Pytorch源码解析
  • Qt 文字描边(基础篇)
  • .360勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • Nginx(四层+七层代理)+Tomcat实现负载均衡、动静分离
  • 【前端】vscode 相关插件
  • 【MySQL】MySQL库的增删查改
  • 基于基于深度学习的表情识别人脸打分系统
  • Linux|操作系统|Error: Could not create the Java Virtual Machine 报错的解决思路
  • K8S学习指南-minikube的安装
  • 恒创科技:有哪些免费的CDN加速服务
  • Kibana搜索数据利器:KQL与Lucene
  • float32、int8、uint8、int32、uint32之间的区别
  • 百度搜索展现服务重构:进步与优化
  • icmp协议、ip数据包 基础
  • es6从url中获取想要的参数
  • 【elementui笔记:el-table表格的输入校验】
  • 每天五分钟计算机视觉:GoogLeNet的核心模型结构——Inception
  • 卡片C语言(2021年蓝桥杯B)
  • 数据库动态视图和存储过程报表数据管理功能设计
  • css+js 选项卡动画效果
  • [C错题本]转义字符/指针与首元素/运算