栈和队列的转换

目录

一、栈转队列

1、定义队列

2、放入元素

3、判断队列是否为空

4、队列的第一个元素

5、队列第一个元素的值

6、方法使用

二、队列转栈

1、定义栈

2、判断栈是否为空

3、放入元素

4、栈顶元素

5、栈顶元素的值

6、方法使用


一、栈转队列

   定义两个栈,一个栈(s1)存放要放入的元素,然后将存放的元素放入另一个栈(s2)中,因为栈是先进后出,所以两个栈的排列顺序相反,队列是先进的先出,所以s2元素的出栈顺序和栈顶元素和队列相同,所以对s2进行操作就可以实现一个队列。

1、定义队列

用两个栈来实现队列

public class MyQueue {private Stack<Integer> s1;private Stack<Integer> s2;public MyQueue() {s1 = new Stack<>();s2 = new Stack<>();}

2、放入元素

先将元素放入s1中

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

3、判断队列是否为空

队列是否为空就是判断两个栈是否为空

public boolean empty(){return s1.empty()&&s2.empty();}

4、队列的第一个元素

  队列是先进先出,栈是先进后出,将s1的元素从栈顶依次放入s2中,s2的排列顺序和队列相同,队列的第一个元素就是s2的栈顶元素,将栈顶元素取出。

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

5、队列第一个元素的值

队列第一个元素的值,就是s2的栈顶元素的值,不需要将栈顶元素从栈中取出。

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

6、方法使用

定义一个Main类,对定义的方法进行使用。

public class Test {public static void main(String[] args) {MyQueue myQueue=new MyQueue();myQueue.push(1);myQueue.push(2);myQueue.push(3);myQueue.push(4);myQueue.push(5);myQueue.push(6);System.out.println(myQueue.empty());System.out.println(myQueue.pop());System.out.println(myQueue.peek());}}

执行结果:

false
1
2


二、队列转栈

   定义两个队列(qu1 qu2)来实现栈,先将值先放入qu1中,之后哪个栈不为空放入哪个栈中。因为栈是先进后出,队列是先进先出,所以同样的元素放入栈和队列中,栈的栈顶元素就是队列的最后一个元素。将最后一个元素在前的元素放入另一个队列中,最后一个元素就来到了队列的第一个元素,可以直接取出,就取出了栈的栈顶元素。

1、定义栈

用两个队列来实现栈

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

2、判断栈是否为空

判断栈是否为空就是判断两个队列是否为空

public boolean empty(){return queue1.isEmpty() && queue2.isEmpty();}

3、放入元素

     在取栈顶元素时,两个队列中的元素要相互放入,所以哪个队列不为空,放入哪个队列中,当两个队列都为空,放入第一个队列中。

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

4、栈顶元素

栈和队列的放入顺序相反,队列的最后一个元素就是栈顶元素

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

5、栈顶元素的值

将队列中的元素都放入另一个队列中,用x来记录最后一个元素的值,就是栈顶元素的值。

public int peek(){if (empty()){return -1;}else if (!queue1.isEmpty()){int size=queue1.size();int x=-1;for (int i = 0; i < size; i++) {x= queue1.poll();queue2.offer(x);}return x;}else {int size=queue2.size();int x=-1;for (int i = 0; i < size-1; i++) {x=queue2.poll();queue1.offer(x);}return x;}}}

6、方法使用

定义一个Main类来对定义的方法进行实现

public class Main {public static void main(String[] args) {MyStack myStack=new MyStack();myStack.push(1);myStack.push(2);myStack.push(3);myStack.push(4);myStack.push(5);myStack.push(6);System.out.println(myStack.empty());System.out.println(myStack.pop());System.out.println(myStack.peek());}}

执行结果:

false
6
5


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

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

相关文章

2024.6.8

2024.6.8 **每日一题** 3040.相同分数的最大操作数目 Ⅱ&#xff0c;通多题意可知&#xff0c;该题最多有三种操作分数&#xff0c;分别是前两个&#xff0c;最后两个&#xff0c;以及第一个和最后一个的和。从这里也可以看出一共有三种状态转移方式&#xff0c;所以我们可以利…

【数据分享】《中国文化文物与旅游统计年鉴》2022

最近老有同学过来询问《中国旅游年鉴》、《中国文化文物统计年鉴》、《中国文化和旅游统计年鉴》、《中国文化文物与旅游统计年鉴》&#xff0c;这四本年年鉴的关系以及怎么获取这四本年鉴。今天就在这里给大家分享一下这四本年鉴的具体情况。 实际上2018年&#xff0c;为适应…

java之面向对象

1 面向对象介绍 <span style"background-color:#f8f8f8"><span style"color:#333333">1.面向过程:自己的事情自己干,代表语言C语言洗衣服:每一步自己要亲力亲为 -> 找个盆,放点水,找个搓衣板,搓搓搓 2.面向对象:自己的事情别人帮忙去干,代…

什么是突发性耳聋?

72小时内突然发生、原因不明的感音神经性听力损失&#xff0c;至少在相邻的两个频率听力下降≥20dBHL。 特点&#xff1a; 1发生在数分钟、数小时或3天以内的听力下降&#xff1b; 2原因不明&#xff1b; 3多发生于单侧&#xff0c;可伴有耳鸣、耳堵塞感及耳周麻木感&#…

【ARM Cache 及 MMU 系列文章 6.1 -- Cache maintenance 相关寄存器及指令详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cache Maintenance registers and instructionsDCZID_EL0DCZID_EL0寄存器字段解释 DCZ 使用场景Cache maintenance 范围选择 Cache maintenance 指令集 Cache Maintenance registers a…

C# E2Pose人体关键点检测(OpenVINO推理)

C# E2Pose人体关键点检测(OpenVINO推理) 目录 效果 模型信息 项目 代码 下载 效果 模型信息 Inputs ------------------------- name&#xff1a;inputimg tensor&#xff1a;Float[1, 3, 512, 512] --------------------------------------------------------------- Ou…

宝塔 php7.4 安装SQLserver扩展

一、加入微软源 curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo二、安装odbc驱动程序 yum install msodbcsql mssql-tools unixODBC-devel 三、安装php7.4对应的pdo_sqlsrv扩展包 # 下载 wget http://pecl.php.net/…

C++数组

将数组作为引用传递给函数 函数参数不能是数组&#xff08;否则退化为指针&#xff09;&#xff0c;但可以是到数组的引用类型或指向其的指针类型&#xff0c;此时不会退化。 #include <iostream>void printArray(int (&arr)[5]) {for (int i 0; i < 5; i) {st…

Python代码大使用Paramiko轻松判断文件类型,提取上级目录

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、Paramiko简介 Paramiko是一个用于SSHv2协议的Python实现&#xff0c;提供了客户端和服务器功能。它可以用于远程连接和管理服务器&#xff0c;执行命令、上传下载文件等。本文将介绍如何使用Paramiko判断文件类…

数据挖掘分析的一点进步分享

import pandas as pd import matplotlib.pyplot as plt import numpy as npdata pd.read_csv(heros.csv,encoding"gbk") data.head() 导入数据集 进行分析 df_datadata.copy() df_data.describe()df_data.info() df_data.drop(英雄,axis1,inplaceTrue) df_data[最…

排查服务器cpu运行过高

ps -ef|grep java 查看所有运行的jar包 kill -9 进程号 杀死进程 nohup java -jar systemManagement-1.0-SNAPSHOT.jar > systemManagement.log 2>&1 & 运行jar包并把它挂在后台&#xff0c;而且生成log文件 排查服务器cpu运行过高 jps -lm 查看jar包是否真的…

饥荒云服务器卡顿情况如何解决

随着网络游戏的普及&#xff0c;云服务器逐渐成为游戏开发者和玩家们的首选。然而&#xff0c;在使用饥荒云服务器时&#xff0c;有时会遇到卡顿的问题&#xff0c;这给玩家带来了困扰。本文将探讨饥荒云服务器卡顿的原因&#xff0c;并提供一些可能的解决方法。 卡顿产生的原因…

实践分享:如何用小程序里的小组件做应用开发?

随着移动互联网的快速发展&#xff0c;小程序等轻量级应用平台日益成为用户获取信息和服务的重要渠道。而小组件也在其中扮演了至关重要的角色&#xff0c;不仅能够提升用户的交互体验&#xff0c;还能帮助开发者高效地构建功能丰富、界面美观的小程序。 本文中&#xff0c;我们…

构建第一个ArkTS应用之@卡片使用动效能力

ArkTS卡片开放了使用动画效果的能力&#xff0c;支持显式动画、属性动画、组件内转场能力。需要注意的是&#xff0c;ArkTS卡片使用动画效果时具有以下限制&#xff1a; 表1 动效参数限制 名称 参数说明 限制描述 duration 动画播放时长 限制最长的动效播放时长为1秒&…

使用 Java 操作 Redis 数据类型的详解指南

使用 Java 操作 Redis 数据类型的详解指南 在这篇指南中&#xff0c;我们将详细介绍如何使用 Java 通过 Jedis 客户端操作 Redis 的各种数据类型。每个示例都展示了如何连接到 Redis 并使用 Jedis 客户端执行各种操作&#xff0c;涵盖了字符串、列表、集合、哈希、有序集合、位…

深入理解交叉熵损失 CrossEntropyLoss - 最大似然估计

深入理解交叉熵损失 CrossEntropyLoss - 最大似然估计 flyfish 下面有详细的例子和公式的说明。 最大似然估计的概念 最大似然估计是一种统计方法&#xff0c;用来估计模型参数&#xff0c;使得在这些参数下观测到的数据出现的概率&#xff08;即似然&#xff09;最大。 具…

MySQL-7、连接的原理

前言 前面介绍了MySQL执行查询语句其中访问方法&#xff0c;包括const、ref、ref_or_null、range、index、all、index_merge&#xff08;索引合并&#xff09;。索引合并又分三种情况&#xff0c;Intersection(交集)索引合并、Union(并集)索引合并、Sort-Union索引合并。 &…

JavaWeb2-Vue

Vue 前端框架&#xff0c;免除原生JS中的DOM操作简化书写 &#xff08;以前学过又忘了&#xff0c;现在才知道原来vue是前端的&#xff09; 基于MVVM思想&#xff08;model-view -viewModel&#xff09;实现数据双向绑定 model是数据模型 view负责数据展示 即DOM 中间这个负责…

工具方法 - 如何设定自己成为什么样的人

设定自己应该成为一个什么样的人是一个个人成长和自我发现的过程。以下是一些步骤和建议&#xff0c;可能会对你有帮助&#xff1a; 1. 自我反思 了解自己&#xff1a; 花时间思考你的兴趣、价值观、优点和缺点。问问自己&#xff1a; 我喜欢做什么&#xff1f;我擅长什么&a…

堆排序讲解

前言 在讲堆的删除时&#xff0c;我们发现一步一步删除堆顶的数据&#xff0c;排列起来呈现出排序的规律&#xff0c;所以本节小编将带领大家进一步理解堆排序。 1.堆排序概念 那么什么是堆排序&#xff1f; 堆排序&#xff08;Heap Sort&#xff09;是一种基于堆数据结构的排…