用队列实现栈和用栈实现队列(下)

news2025/1/14 5:38:41

目录

一.队列实现栈:题目链接

         题解代码:

        题解思路:

        二.栈实现队列:题目链接

         题解代码:

        题解思路:


一.队列实现栈:题目链接

         题解代码:

private Queue<Integer> s1;
    private Queue<Integer> s2;


    public MyStack() {
        s1 = new LinkedList<>();
        s2 = new LinkedList<>();

    }
    
    public void push(int x) {
        if(empty()) {
            s1.offer(x);
            return;
        }

        if(!s1.isEmpty()) {
            s1.offer(x);
        } else {
            s2.offer(x);
        }
    }
    
    public int pop() {
        if(empty()) {
            return -1;
        }
        if(s1.isEmpty()) {
            int a = s2.size(); 
            while(a - 1 != 0) {
                s1.offer(s2.poll());
                a--;
            }
            return s2.poll();
        } else {
             int a = s1.size(); 
            while(a - 1 != 0) {
                s2.offer(s1.poll());
                a--;
            }
            return s1.poll();
        }
    }
    
    public int top() {
         if(empty()) {
            return -1;
        }
        if(s1.isEmpty()) {
            int a = s2.size(); 
            int tem = 0;
            while(a != 0) {
                tem = s2.poll();
                s1.offer(tem);
                a--;
            }
            return tem;
        } else {
             int a = s1.size(); 
             int tem = 0;
            while(a != 0) {
                tem = s1.poll();
                s2.offer(tem);
                a--;
            }
            return tem;
        }
    }
    
    public boolean empty() {
        return s1.isEmpty() && s2.isEmpty();
    }

        题解思路:

        首先,对于这个问题,我们可以使用两个队列来实现一个栈,保证其中栈的 入元素,出元素,获取栈顶元素 和 判断栈是否为空的基本方法是否有效

        入元素

        如果两个队列都为空的话,我们默认入元素在 s1队列里面。

        如果只是其中一个队列为空的话,则入元素在为空的队列里。

        出元素

        先判断两个队列是否都为空,防止异常。

        先判断那个队列为空,再把不空的队列里的元素放到空的队列里,不空的队列里剩下最后一个元素就是要出的元素。

        获取栈顶元素

        这里的实现逻辑与出元素的逻辑很相像,不同的是,在放元素之前定义了一个整型变量用来存储每次出元素的值,就不用特意剩下一个元素在之前的队列里了,直接返回最后一个tem值就是要获取的栈顶元素。

        

        二.栈实现队列:题目链接

         题解代码:

private Stack<Integer> s1;
    private Stack<Integer> s2;

    public MyQueue() {
        s1 = new Stack<>();
        s2 = new Stack<>();

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

        题解思路:

        首先,在这里我们使用两个栈来实现一个队列,还是一样,要保证其中队列的 入元素,出元素,获取队列首元素 和 判断队列是否为空的基本方法是否有效

        这里我们默认入元素都是在 栈s1里。出元素在栈s2里完成。

        对于出元素

        在之前要判断两个栈是否都为空,防止异常。

        然后,如果栈s2为空,则把栈s1里的元素全部放到栈s2里,之后再出元素。

        对于获取队列首元素

        与出元素逻辑类似,不同的是代码最后是peek方法。

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

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

相关文章

【Vim Masterclass 笔记10】S06L23:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第二部分)

文章目录 S06L23 Search, Find, and Replace - Part Two1 文本替换命令 :s/old/new/2 指定范围的文本替换3 特例&#xff1a;路径的替换4 文件行号的配置5 要点总结&#xff08;1&#xff09;搜索当前行&#xff08;Same Line Searching&#xff09;&#xff08;2&#xff09;跨…

Wallpaper壁纸制作学习记录14

交互式操控变形动画 操控变形动画与ScenceScript 结合使用还可用于创建交互式壁纸元素。在本次实例中&#xff0c;将讲解如何允许用户抓取和拖动单个骨骼。 交互式骨骼 这里提供了本次实例中的项目下载链接&#xff1a;果冻项目。 设置操控变形动画 为了实现这一点&#xff…

vscode 扩展Cline、Continue的差别?

Cline和Continue都是VSCode的AI编程插件&#xff0c;它们在功能、用户体验、性能、适用场景以及配置和使用步骤等方面存在一些差别&#xff1a; 一、功能差异 编辑功能 Cline&#xff1a;能够分析项目的文件结构和源代码抽象语法树&#xff08;AST&#xff09;&#xff0c;通…

【Rust自学】12.3. 重构 Pt.1:改善模块化

12.3.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数读取…

excel设置好的可选择列数据后,如何快速输入到单元格中?

当设置好列的【数据】-【数据有效性】-【序列】后&#xff0c;在单元格中输入可选择数据的开头&#xff0c;就会提示出对应的可选择数据&#xff0c;然后&#xff0c;按一下键盘上的【↓】键&#xff0c;再按回车&#xff0c;即可快速输入到单元格中。

Vue3.5 企业级管理系统实战(二):Router、Pinia 及 Element-Plus 集成

1 Vue Router 集成 1.1 安装 vue-router 通过 pnpm 安装 Vue Router pnpm i vue-router 1.2 配置 Router 在 src 文件夹下新建 views 文件夹&#xff0c;新建文件 Home.vue 和 About.vue 在 src 文件夹下新建 router 文件夹&#xff0c;在 router 下新建 index.ts 用来配置…

OPT: Open Pre-trained Transformer语言模型

摘要 大规模语言模型通常需要数十万计算日的训练时间&#xff0c;展现了在零样本和小样本学习中的显著能力。鉴于其计算成本之高&#xff0c;这些模型在没有大量资本投入的情况下难以复现。对于那些通过API提供的少数模型&#xff0c;研究者无法获取完整的模型权重&#xff0c…

【PDF转Word】 PDF在线转word文档 好用!优质网站资源推荐

大家在工作与学习中&#xff0c;经常需要将PDF文件转换为Word格式以便进行编辑和修改。很多人都不知道怎么操作&#xff0c;今天我们介绍一个非常好用的工具&#xff1a;小白工具网&#xff0c;可以在线帮忙大家快速把PDF转换成word格式。 小白工具网提供的PDF转Word功能&…

2025 年前端开发学习路线图完整指南

如果您想成为前端开发人员&#xff0c;本指南适合您。无论您是从零开始还是已经了解基础知识&#xff0c;它都会帮助您专注于真正重要的事情并学习让您脱颖而出的技能。 刚开始的时候&#xff0c;我浪费了几个月的时间在不相关的教程上&#xff0c;因为我不知道从哪里开始&…

妙用编辑器:把EverEdit打造成一个编程学习小环境

1 妙用编辑器&#xff1a;把EverEdit打造成一个编程学习小环境 1.1 应用场景 最近在学习Python语言&#xff0c;由于只是学习和练习&#xff0c;代码规模很小&#xff0c;不想惊动PyCharm、VSCode、WingIDE这些重型武器&#xff0c;只想轻快的敲些代码&#xff0c;记事本虽好&…

【江协STM32】10-4/5 I2C通信外设、硬件I2C读写MPU6050

1. I2C外设简介 STM32内部集成了硬件I2C收发电路&#xff0c;可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能&#xff0c;减轻CPU的负担支持多主机模型支持7位/10位地址模式支持不同的通讯速度&#xff0c;标准速度(高达100 kHz)&#xff0c;快速…

初识 Git——《Pro Git》

Why Git&#xff1f; 1. 本地版本控制系统 Why&#xff1a; 许多人习惯用复制整个项目目录的方式来保存不同的版本&#xff0c;或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单&#xff0c;但是特别容易犯错。 有时候会混淆所在的工作目录&#xff0c;一不小心…

记一次学习skynet中的C/Lua接口编程解析protobuf过程

1.引言 最近在学习skynet过程中发现在网络收发数据的过程中数据都是裸奔&#xff0c;就想加入一种数据序列化方式&#xff0c;json、xml简单好用&#xff0c;但我就是不想用&#xff0c;于是就想到了protobuf&#xff0c;对于protobuf C/C的使用个人感觉有点重&#xff0c;正好…

使用RSyslog将Nginx Access Log写入Kafka

个人博客地址&#xff1a;使用RSyslog将Nginx Access Log写入Kafka | 一张假钞的真实世界 环境说明 CentOS Linux release 7.3.1611kafka_2.12-0.10.2.2nginx/1.12.2rsyslog-8.24.0-34.el7.x86_64.rpm 创建测试Topic $ ./kafka-topics.sh --zookeeper 192.168.72.25:2181/k…

MySQL(行结构)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; MySQL 一行记录是怎么存储的&#xff1f; | 小林coding MySQL原理 - InnoDB引擎 - 行记录存…

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作&#xff0c;不同的仿真平台有不同的建模语言&#xff0c;但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…

基于mybatis-plus历史背景下的多租户平台改造

前言 别误会&#xff0c;本篇【并不是】 要用mybatis-plus自身的多租户方案&#xff1a;在表中加一个tenant_id字段来区分不同的租户数据。并不是的&#xff01; 而是在假设业务系统已经使用mybatis-plus多数据源的前提下&#xff0c;如何实现业务数据库隔开的多租户系统。 这…

【JAVA基础】Collections方法的具体使用方法

java基础中Collections及collect(toList,toSet,toMap)的用法 package com.gaofeng;import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream;public class demo01 {public static void main(String[] …

HDFS 的API的操作

3.1 客户端环境准备(windows) 1&#xff09;拷贝hadoop-3.1.X到非中文路径&#xff08;比如d:\&#xff09;。 2&#xff09;配置HADOOP_HOME环境变量 3&#xff09;配置Path环境变量。 注意&#xff1a;如果环境变量不起作用&#xff0c;可以重启电脑试试。 也可以直接添加…

【数据库】二、关系数据库

文章目录 二、关系数据库1 关系2 关系数据库3 完整性约束4 关系运算 二、关系数据库 1 关系 域&#xff1a;一组具有相同数据类型的值的集合。 笛卡尔积&#xff1a;所有域&#xff08;域可相同&#xff09;中所有取值的组合 例如&#xff1a;D1{1,2,3}&#xff0c;D2{A,b}&…