【数据结构面试题】栈与队列的相互实现

目录

1.队列实现栈

1.1创建栈

1.2判断是否为空

1.3入栈

1.4出栈

1.5获取栈顶元素

1.6完整代码

2. 用栈实现队列

2.1创建队列

2.2判断是否为空 

2.3入队列

2.4出队列

2.5获取队头元素

2.6完整代码


1.队列实现栈

用队列实现栈icon-default.png?t=N7T8https://leetcode.cn/problems/implement-stack-using-queues/

描述: 

 

方法:我们用两个队列来实现栈

整体思路:

1.1创建栈

代码: 

public class MyStack {private Queue<Integer> qu1;private Queue<Integer> qu2;public MyStack(){qu1=new LinkedList<>();qu2=new LinkedList<>();}}

1.2判断是否为空

只要qu1与qu2都为null时,栈就为空

代码: 

 public boolean empty() {return qu1.isEmpty() && qu2.isEmpty();}

1.3入栈

(1)我们对两个队列进行检查,那个队列不为空,我们就把元素放在那个队里

(2)若元素都为空,则我们把元素放在qu1里

代码: 

  public void push(int x) {if (!qu1.isEmpty()) {qu1.offer(x);} else if (!qu2.isEmpty()) {qu2.offer(x);} else {qu1.offer(x);}}

1.4出栈

(1)我们对两个队列进行检查,若都为空,返回-1。

(2)只要不是(1)则先检查qu1,再先检查qu2,将不为空的队列出size-1个元素到另一个队列里

代码:

    public int pop() {if (empty()) {return -1;}if(!qu1.isEmpty()){int size=qu1.size() ;for (int i = 0; i <size-1; i++) {int val=qu1.poll();qu2.offer(val);}return qu1.poll();} else {int size=qu2.size() ;for (int i = 0; i <size-1; i++) {int val=qu2.poll();qu1.offer(val);}return qu2.poll();}}

1.5获取栈顶元素

与出栈方法类似

  public int top() {if (empty()) {return -1;}if(!qu1.isEmpty()){int val=-1;int size=qu1.size() ;for (int i = 0; i <size; i++) {val=qu1.poll();qu2.offer(val);}return val;} else {int val=-1;int size=qu2.size() ;for (int i = 0; i <size; i++) {val=qu2.poll();qu1.offer(val);}return val;}}

1.6完整代码

import java.util.LinkedList;
import java.util.Queue;public class MyStack {private Queue<Integer> qu1;private Queue<Integer> qu2;public MyStack() {qu1 = new LinkedList<>();qu2 = new LinkedList<>();}public void push(int x) {if (!qu1.isEmpty()) {qu1.offer(x);} else if (!qu2.isEmpty()) {qu2.offer(x);} else {qu1.offer(x);}}public int pop() {if (empty()) {return -1;}if(!qu1.isEmpty()){int size=qu1.size() ;for (int i = 0; i <size-1; i++) {int val=qu1.poll();qu2.offer(val);}return qu1.poll();} else {int size=qu2.size() ;for (int i = 0; i <size-1; i++) {int val=qu2.poll();qu1.offer(val);}return qu2.poll();}}public int top() {if (empty()) {return -1;}if(!qu1.isEmpty()){int val=-1;int size=qu1.size() ;for (int i = 0; i <size; i++) {val=qu1.poll();qu2.offer(val);}return val;} else {int val=-1;int size=qu2.size() ;for (int i = 0; i <size; i++) {val=qu2.poll();qu1.offer(val);}return val;}}public boolean empty() {return qu1.isEmpty() && qu2.isEmpty();}
}

2. 用栈实现队列

描述: 

用栈实现队列icon-default.png?t=N7T8https://leetcode.cn/problems/implement-queue-using-stacks/

 方法:两个栈来实现队列

2.1创建队列

public class MyQueue {private Stack<Integer> stack1;private Stack<Integer> stack2;public MyQueue() {stack1 = new Stack<>();stack2 = new Stack<>();}
}

2.2判断是否为空 

只要stack1与stack2都为null时,队列就为空

public boolean empty() {return stack1.empty()&&stack2.empty();}

2.3入队列

入栈的元素全部放入stack1中

 public void push(int x) {stack1.push(x);}

2.4出队列

出栈时,检查stack2是否为null,若为null,则直接将stack1的元素出栈后入到stack2里

然后弹出栈顶元素即可

   public int pop() {if (empty()){return -1;}if(stack2.empty()){while(!stack1.empty())  {stack2.push(stack1.pop());}}return stack2.pop();}

2.5获取队头元素

public int peek() {if (empty()){return -1;}if(stack2.empty()){while(!stack1.empty())  {stack2.push(stack1.pop());}}return stack2.peek();}

2.6完整代码

import java.util.Stack;public class MyQueue {private Stack<Integer> stack1;private Stack<Integer> stack2;public MyQueue() {stack1 = new Stack<>();stack2 = new Stack<>();}public void push(int x) {stack1.push(x);}public int pop() {if (empty()){return -1;}if(stack2.empty()){while(!stack1.empty())  {stack2.push(stack1.pop());}}return stack2.pop();}public int peek() {if (empty()){return -1;}if(stack2.empty()){while(!stack1.empty())  {stack2.push(stack1.pop());}}return stack2.peek();}public boolean empty() {return stack1.empty() && stack2.empty();}
}

以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++11】{}初始化、std::initializer_list、decltype、STL新增容器

文章目录 1. C11简介2. 统一的列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list 3. 声明3.1 auto3.2 decltype 4. nullptr5. 范围for循环6. 智能指针7. C11STL中的一些变化8. 演示代码 1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1…

windows环境下node安装教程(超详细)

安装node.js 1、下载node: 下载地址&#xff1a;下载 | Node.js 中文网 node.js的zip包安装时是直接解压缩后就可以了, node.js的msi包是傻瓜式一路next就可以了 选择一中方式就可以 2、解压后的目录,或者mis安装后的目录如下: 3、安装完后&#xff0c;可以在命令行中输入…

vscode调试程序设置

主要设置和json内容如下&#xff1a; cpp_properties.json内容&#xff1a; {"configurations": [ //C intellisense插件需要这个文件&#xff0c;主要是用于函数变量等符号的只能解析{"name": "Win32","includePath": ["${work…

Windows云服务器 PHP搭建网站外网无法访问的问题

前言&#xff1a;本人在华为云上租了一台windows的云主机&#xff0c;可以远程访问桌面的那种&#xff0c;然后想搭个网站&#xff0c;最开始想到的是IIS&#xff0c;测试了下用html的文件&#xff0c;没有问题。但是&#xff0c;php文件却不能用&#xff0c;因为少了PHP环境。…

微信小程序中识别html标签的方法

rich-text组件 在微信小程序中有一个组件rich-text可以识别文本节点或是元素节点 具体入下: //需要识别的数据放在data中,然后放在nodes属性中即可 <rich-text nodes"{{data}}"></rich-text>详情可以参考官方文档:https://developers.weixin.qq.com/mi…

穷举深搜暴搜回溯剪枝(4)

一)单词搜索: 直接在矩阵中依次找到特定字符串 79. 单词搜索 - 力扣&#xff08;LeetCode&#xff09; 画出决策树&#xff0c;只需要做一个深度优先遍历: 1)设计dfs函数:只需要关心每一层在做什么即可&#xff0c;从这个节点开始&#xff0c;开始去尝试匹配字符串的下一个字符…

海光异构智能计算专区上线飞桨AI Studio!

近日&#xff0c;海光异构智能计算专区正式上线飞桨AI Studio(星河社区)。专区内容来自官方发布和社区贡献&#xff0c;包含双方产品合作成果、行业解决方案、优秀项目展示等&#xff0c;致力于帮助开发者快速了解体验飞桨、为海光异构智能计算软硬协同优化带来更高性能提升。 …

Kafka3.0.0版本——消费者(消费者组原理)

目录 一、消费者组原理1.1、消费者组概述1.2、消费者组图解示例1.3、消费者组注意事项 一、消费者组原理 1.1、消费者组概述 Consumer Group&#xff08;CG&#xff09;&#xff1a;消费者组&#xff0c;由多个consumer组成。形成一个消费者组的条件&#xff0c;是所有消费者…

C#事件event

事件模型的5个组成部分 事件拥有者&#xff08;event source&#xff09;&#xff08;类对象&#xff09;&#xff08;有些书将其称为事件发布者&#xff09; 事件成员&#xff08;event&#xff09;&#xff08;事件拥有者的成员&#xff09;&#xff08;事件成员就是事件本身…

用python实现基本数据结构【04/4】

说明 如果需要用到这些知识却没有掌握&#xff0c;则会让人感到沮丧&#xff0c;也可能导致面试被拒。无论是花几天时间“突击”&#xff0c;还是利用零碎的时间持续学习&#xff0c;在数据结构上下点功夫都是值得的。那么Python 中有哪些数据结构呢&#xff1f;列表、字典、集…

2023高教社杯数学建模A题思路分析 - 定日镜场的优化设计

# 1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c; 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…

FastViT实战:使用FastViT实现图像分类任务(一)

文章目录 摘要安装包安装timm安装 grad-cam安装mmcv 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集补充一个知识点&#xff1a;torch.jit两种保存方式 摘要 论文翻译&#xff1a;https://wanghao.blog.csdn.net/article/details/132407722?spm1001.2014.3001.550…

mysql leetcode打题记录

文章目录 完成度基本语法高级语法连接日期 函数编写函数聚合函数 因为上过的数据库课实在太水了&#xff0c;所以打算先在菜鸟教程/CSDN/leetcode先学一下基本语法&#xff0c;然后去做Stanford数据库原理的课程CS145。 小目标&#xff1a;把leetcode上不用钱的mysql的题先做一…

企业密码安全:ADSelfService Plus 提升密码管理的千里之行

在当今数字化时代&#xff0c;企业的密码安全变得至关重要。密码是保护企业敏感信息和数据的第一道防线&#xff0c;而有效的密码管理对于确保网络安全至关重要。ADSelfService Plus是一款强大的密码管理和自助服务解决方案&#xff0c;它在提供密码安全方面走在了前沿。 ADSel…

【大数据之Kafka】十、Kafka消费者工作流程

1 Kafka消费方式 &#xff08;1&#xff09;pull&#xff08;拉&#xff09;模式&#xff1a;消费者从broker中主动拉取数据。&#xff08;Kafka中使用&#xff09; 不足&#xff1a;如果Kafka中没有数据&#xff0c;消费者可能会陷入循环&#xff0c;一直返回空数据。 &#…

Python自动化测试(1)-自动化测试及基本技术手段概述

生产力概述 在如今以google为首的互联网时代&#xff0c;软件的开发和生产模式都已经发生了变化&#xff0c; 在《参与感》一书提到&#xff1a;某位从微软出来的工程师很困惑&#xff0c;微软在google还有facebook这些公司发展的时候&#xff0c;为何为感觉没法有效还击&…

嵌入式基础知识-信息安全与加密

本篇来介绍计算机领域的信息安全以及加密相关基础知识&#xff0c;这些在嵌入式软件开发中也同样会用到。 1 信息安全 1.1 信息安全的基本要素 保密性&#xff1a;确保信息不被泄露给未授权的实体。包括最小授权原则、防暴露、信息加密、物理加密。完整性&#xff1a;保证数…

电容笔值不值得买?开学季比较好用的电容笔

眼看着新学期即将到来&#xff0c;到底应该选择什么样的电容笔&#xff1f;一款原装的苹果Pencil&#xff0c;就卖到了将近一千块&#xff0c;这对于很多人来说&#xff0c;都是一个十分昂贵的价格。事实上&#xff0c;由于平替电容笔的价格非常便宜&#xff0c;只要一二百元就…

【Spring Boot 源码学习】OnClassCondition 详解

Spring Boot 源码学习系列 OnClassCondition 详解 引言往期内容主要内容1. getOutcomes 方法2. 多处理器拆分处理3. StandardOutcomesResolver 内部类4. getMatchOutcome 方法 总结 引言 上篇博文带大家从源码深入了自动配置过滤匹配父类 FilteringSpringBootCondition&#x…

尚硅谷大数据项目《在线教育之离线数仓》笔记007

视频地址&#xff1a;尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 第12章 报表数据导出 P112 01、创建数据表 02、修改datax的jar包 03、ads_traffic_stats_by_source.json文件 P113 P114 P115 P116 P117 P118 P119 P120 P121 P122【122_在…