iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java栈和队列的相互转换详解
  • 825
分享到

Java栈和队列的相互转换详解

2024-04-02 19:04:59 825人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录用栈实现队列—力扣232题用队列实现栈—力扣225题 1. 双队列实现栈2.一个队列实现栈栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。

栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。

用栈实现队列—力扣232题

题目要求:仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作

使用双栈来实现队列,我们就可以让一个栈储存具体元素,另一个栈做辅助 

上图可以看到,新元素进栈时,要确保该栈为空。进入栈的元素按顺序存到辅助栈中,等新元素进入栈之后,再将辅助栈中的元素按顺序出到该栈中。这样操作之后,栈中元素存放的顺序就和队列的一样啦

代码实现:


 
//双栈模拟队列
public class MyQueue{
    //实际存储元素的栈
    private Stack<Integer> s1 = new Stack<>();
    //辅助栈
    private Stack<Integer> 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<Integer> q1 = new LinkedList<>();
    //q2是辅助队列
    //添加元素后保证q2永远为空
    private Queue<Integer> 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<Integer> 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<Integer> 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 栈和队列的相互转换详解的文章就介绍到这了,更多相关Java 栈和队列 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java栈和队列的相互转换详解

本文链接: https://www.lsjlt.com/news/139104.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java栈和队列的相互转换详解
    目录用栈实现队列—力扣232题用队列实现栈—力扣225题 1. 双队列实现栈2.一个队列实现栈栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。...
    99+
    2024-04-02
  • Java中栈和队列如何相互转换
    这篇文章将为大家详细讲解有关Java中栈和队列如何相互转换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。用栈实现队列...
    99+
    2023-06-29
  • C语言栈与队列相互实现详解
    目录一、本章重点二、队列实现栈三、栈实现队列四、解题思路总结一、本章重点 用两个队列实现栈用两个栈实现队列解题思路总结 二、队列实现栈  我们有两个队列:  ...
    99+
    2024-04-02
  • Java栈和基础队列的实现详解
    目录栈(stack)栈支持的三个核心操作:栈的常见实际应用:栈的实现队列无论是哪种队列,都必须支持三个核心操作:基础队列的实现 栈和队列:都是线性表,都是基于List基础上...
    99+
    2024-04-02
  • Java使用跳转结构实现队列和栈流程详解
    目录导读队列跳转结构结点实现队列测试队列栈实现栈测试代码导读 在数据结构当中所有的数据结构都是由 连续数据结构或者跳转数据结构 单独或者拼接做成。 连续结构和跳转结构是数据结构中常见...
    99+
    2023-05-15
    Java跳转结构实现队列 Java跳转结构实现栈
  • Java中String和Char的相互转换
    一、String类型转化为char类型二、char类型转化为String类型 一、String类型转化为char类型 用String.charAt()来让String类型转化为cha...
    99+
    2023-09-01
    java
  • json对象和formData相互转换的方式详解
    目录前言常见的 POST 提交数据方式JSON 格式和 formData 格式的区别json 对象转 formDataformData 对象转 json前言 大家都知道,前端在和后台...
    99+
    2023-02-14
    json对象和formData相互转换 formData转换json
  • java--- xml和对象之间的互相转换
    例子是把xml映射成bean成对象 第一种方法是使用 JAXB(Java Architecture for XML Binding) 实现XML与Bean的相互转换 简介 JAXB是一个业界的标准,是一项可以根据X...
    99+
    2023-08-31
    java
  • Java实体和JSON之间的相互转换
    Java实体和JSON之间的相互转换 一、先写一个测试用的Java实体二、将Java实体转化为Json1、基于com.alibaba.fastjson.JSON(1)、JSON.toJSONS...
    99+
    2023-09-10
    java json 开发语言
  • Java的栈和队列实例分析
    这篇文章主要讲解了“Java的栈和队列实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的栈和队列实例分析”吧!栈package com.yuzhenc.collect...
    99+
    2023-06-29
  • Java栈与队列超详细分析讲解
    目录一、栈(Stack)1、什么是栈?2、栈的常见方法3、自己实现一个栈(底层用一个数组实现)二、队列(Queue)1、什么是队列?2、队列的常见方法3、队列的实现(单链表实现)4、...
    99+
    2024-04-02
  • C++ 栈和队列的实现超详细解析
    目录1、栈的介绍:2、栈的常用接口实现 3、队列的介绍4、队列的常用接口实现 可算是把链表给结束了,很多小伙伴已经迫不及待想看到栈和队列了,那么它来了!相信有了顺...
    99+
    2024-04-02
  • Javascript数据结构之栈和队列详解
    目录前言栈(stack)栈实现解决实际问题栈的另外应用简单队列(Queue)队列实现队列应用 - 树的广度优先搜索(breadth-first search,BFS)优先队列优先队列...
    99+
    2024-04-02
  • C#实现Word和ODT文档相互转换详解
    目录程序环境方法1方法2格式转换1. Word转为ODTC#vb.net2. ODT转为WordC#vb.netODT文档格式一种开放文档格式(OpenDocument Text)。...
    99+
    2024-04-02
  • C语言数据结构之栈与队列的相互实现
    目录一、用对列实现栈代码实现二、用栈实现队列代码实现一、用对列实现栈 题干要求: 细节分析:队列是先进先出; 要实现的栈是先进后出。 解题思路:假设:先用一个队列储存数据 N 个,...
    99+
    2024-04-02
  • 数据结构TypeScript之栈和队列详解
    目录栈结构特点出栈和入栈面向对象方法封装栈队列结构特点出队和入队面向对象方法封装队列栈结构特点 栈是线性表的其中一种,用于存储固定顺序的元素,元素增删具有先进后出的特点。 出栈和入...
    99+
    2023-01-30
    TypeScript数据结构栈队列 TypeScript数据结构
  • 数据结构:栈和队列(详细讲解)
    🎇🎇🎇作者: @小鱼不会骑车 🎆🎆🎆专栏: 《数据结构》 🎓🎓...
    99+
    2023-09-14
    数据结构 java 算法
  • Java基本数据类型之间的相互转换详解
    目录1.自动类型转换1.定义2.数据类型按精度大小排序3.使用细节2.强制类型转换1.定义2.使用细节3.基本数据类型与String类型的转换1.基本数据类型转String类型2.S...
    99+
    2024-04-02
  • Java和Scala集合间的相互转换方式
    目录Java和Scala集合间的相互转换scala与java互转Java与Scala的集合对比一、Java集合1、Collection=>Set接口2、Collection=&...
    99+
    2024-04-02
  • java时间戳与日期相互转换工具详解
    本文为大家分享了java日期与时间戳相互转换大全,供大家参考,具体内容如下package com.crm.util; import java.math.BigDecimal; import java.text.DecimalFormat;...
    99+
    2023-05-30
    java 时间戳 日期
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作