Java中的栈和队列操作,相互实现(力扣 232, 225)

news2024/11/18 19:40:39

栈和队列(Java)

  • Java中的 栈 & 队列 操作
    • 栈的使用
    • 队列的使用
  • LeetCode 232. 用栈实现队列
    • 我的代码
  • LeetCode 225. 用队列实现栈
    • 我的代码

Java中的 栈 & 队列 操作

栈的使用

栈的方法功能
Stack()构造一个空的栈
E push(E e)将e入栈,并返回e
E pop()将栈顶元素出栈并返回
E peek()获取栈顶元素
int size()获取栈中有效元素个数
Boolean empty()检测栈是否为空
Stack<String> s = new Stack<>();
Stack<Intger> s2 = new Stack<>();

队列的使用

队列的方法功能
Boolean offer(E e)入队列
E poll()队头元素出队列并返回
E peek()获取队头元素
int size()获取队列中有效元素个数
Boolean isEmpty()检测队列是否为空

注意: Queue 是个接口,在实例化时必须实例化 LinkedList 的对象,因为 LinkedList 实现了 Queue 接口。

Queue<Integer> q = new LinkedList<>();

LeetCode 232. 用栈实现队列

出错点分析:
①栈的新建不会写、栈的操作方法不清楚
②可以看到 pop 和 peek 函数实现的逻辑都是一样的,很冗余,没有示例代码写的简洁

我的代码

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

    public MyQueue() {
    }
    
    public void push(int x) {
        s1.push(x);
    }
    
    public int pop() {
        while(s1.size() != 0) {
            int tmp = s1.pop();
            s2.push(tmp);
        }
        int ans = s2.pop();
        while(s2.size() != 0) {
            int tmp = s2.pop();
            s1.push(tmp);
        }
        return ans;
    }
    
    public int peek() {
        while(s1.size() != 0) {
            int tmp = s1.pop();
            s2.push(tmp);
        }
        int ans = s2.peek();
        while(s2.size() != 0) {
            int tmp = s2.pop();
            s1.push(tmp);
        }
        return ans;
    }
    
    public boolean empty() {
        return s1.empty();
    }
}

在这里插入图片描述

LeetCode 225. 用队列实现栈

出错点分析:
①队列的新建不会写、队列的操作方法不清楚
②可以看到 pop 和 top 函数实现的逻辑都是一样的,很冗余,没有示例代码写的简洁

我的代码

class MyStack {

    Queue<Integer> q1=new LinkedList<>();
    Queue<Integer> q2=new LinkedList<>();

    public MyStack() {

    }
    
    public void push(int x) {
        q1.offer(x);
    }
    
    public int pop() {
        //移除并返回栈顶元素。
        while(q1.size() != 1) {
            int tmp = q1.poll();
            q2.offer(tmp);
        }
        int ans = q1.poll();
        while(q2.size() != 0) {
            int tmp = q2.poll();
            q1.offer(tmp);
        }

        return ans;
    }
    
    public int top() {
        int ans = -1;//要赋初值
        while(q1.size() != 0) {
            int tmp = q1.poll();
            q2.offer(tmp);
            if(q1.size() == 0) { //是等于0的时候而不是等于1,因为poll操作暗含了size-1
                ans = tmp;
            }
        }
        
        while(q2.size() != 0) {
            int tmp = q2.poll();
            q1.offer(tmp);
        }

        return ans;
    }
    
    public boolean empty() {
        return q1.isEmpty();
    }
}

在这里插入图片描述

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

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

相关文章

拦截器HandlerInterceptor | springmvc系列

拦截器&#xff0c;通俗来来将&#xff0c;就是我们将访问某个路径的请求给拦截下来&#xff0c;然后可以对这个请求做一些操作 基本使用 创建拦截器类 让类实现HandlerInterceptor接口&#xff0c;重写接口中的三个方法。 Component //定义拦截器类&#xff0c;实现Handle…

Java异常处理详解

Java异常处理详解 1. 异常概述2. 异常类别3. 异常处理机制3.1 try-catch示例代码&#xff1a;输出结果&#xff1a; 3.2 finally示例代码&#xff1a;输出结果&#xff1a; 3.3 throw和throws示例代码&#xff1a;输出结果&#xff1a; 4. 自定义异常示例代码&#xff1a;输出结…

【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)

本文由睡觉待开机原创&#xff0c;转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 这里写目录标题 1.sizeof和strlen的对比2.数组和指针笔试题&#xff08;借用sizeof与strlen进行体会&#xff…

FFmpeg编程录制音频(Mac OS)

之前我们使用FFmpeg命令行工具进行了简单的音视频操作&#xff0c;这次在Mac OS环境下编写代码实现简单的音频录制功能。 FFmpeg命令行音频录制 首先回顾一下Mac OS环境下简单的音频录制命令行实现&#xff1a; ffmpeg -f avfoundation -i ":0" -t 20 -acodec pcm…

python_数据可视化_pandas_导入txt数据

目录 1.导入库 2.导入txt文件 3.指定分隔符 4.使用read_table导入csv格式文件 1.导入库 import pandas as pd 2.导入txt文件 data pd.read_table(D:/desktop/TestFile.txt,encodingutf-8)print(data) 3.指定分隔符 txt文件的默认分隔符为/t data pd.read_table(D:/des…

无法解析的外部符号 “public: virtual void * __cdecl MyTcpsocket::qt_metaca

问题&#xff1a;严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2001 无法解析的外部符号 "public: virtual void * __cdecl MyTcpsocket::qt_metacast(char const *)" (?qt_metacastMyTcpsocketUEAAPEAXPEBDZ) SmartTool D:\…

flutter在windows环境搭建

下载flutter https://flutter.cn/docs/development/tools/sdk/releases 下载相应的版本 我放在C盘下&#xff1a; 环境变量 再加系统变量&#xff1a; PUB_HOSTED_URLhttps://pub.flutter-io.cn 如图 FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn 完成

Linux集锦大全【持续更新】

文章目录 Linux集锦大全【持续更新】Linux最常用的几个归档和压缩命令解压方法之一 tar语法压缩文件查看压缩文件的内容解压文件 解压方法之一 zip语法参数参考实例仅保存文件名 解压命令之一 unzip基本命令指定目录解压不解压某些文件 解压命令之一 gzip Linux最危险的几个命令…

AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(六)

《诗小雅小旻》&#xff1a;“战战兢兢&#xff0c;如临深渊&#xff0c;如履薄冰。” 01.Nodejs安装与使用 什么是 Node.js&#xff1f; 什么是前端工程化&#xff1f; Node.js 为何能执行 JS&#xff1f; 查看当前使用的Node.js版本&#xff1a;node -v 执行JS&#xff1a;no…

128基于matlab的粒子群优化算法寻找多元函数的最大值

基于matlab的粒子群优化算法寻找多元函数的最大值&#xff0c;可定义多元函数&#xff0c;变量区间范围&#xff0c;输出最大值条件下的变量值。程序已调通&#xff0c;可直接运行。 128matlab多元函数极值 (xiaohongshu.com)

shell中的正则表达式、编程-grep、编程-SED、以及编程-AWK

正则表达式RE 用来处理文本 正则表达式(Regular Expression, RE)是一种字符模式, 用于在查找过程中匹配指定的字符. 在大多数程序里, 正则表达式都被置于两个正斜杠之间; 例如/l[oO]ve/就是由正斜杠界定的正则表达式, 它将匹配被查找的行中任何位置出现的相同模式. 在正则表达…

iPhone“查找”最多可添加32个物品!

对于那些丢三落四的果粉来说&#xff0c;苹果的“查找”功能是一大福音。不管是丢失了iPhone、iPad、Mac、AirPods还是AirTag&#xff0c;都可以通过“查找”功能在地图上追踪设备的位置&#xff0c;甚至是远程锁定或抹掉设备的数据。 那么&#xff0c;iPhone的查找一次能支持添…

Linux(Debina12)系统安装

在开发或学习中&#xff0c;linux系统是我们必须要熟悉的系统&#xff0c;那么今天就记录一下&#xff0c;较为稳定&#xff0c;也是小编这几年当做开发环境的发行版吧 官网地址 https://www.debian.org 下载链接 http://mirrors.163.com/debian-cd/12.4.0/amd64/iso-dvd/ …

活动回顾∣“全邻友好,艺术大咖交流会”——员村街开展社区微型养老博览会长者文艺汇演活动

为进一步营造邻里守望&#xff0c;共建美好社区的氛围&#xff0c;促进社区长者参与社区服务&#xff0c;展示社区长者健康、积极向上的精神风貌&#xff0c;2024年1月10日&#xff0c;员村街开展“全邻友好&#xff0c;艺术大咖交流会”——微型养老博览会活动&#xff0c;让长…

HarmonyOS Stage模型 UIAbility生命周期状态

UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态 Create状态&#xff0c;在UIAbility实例创建时触发&#xff0c;对应onCreate回调。可以在onCreate回调中进行相关初始化操作 import UIAbility from ohos.app.ability.UIAbility; import window from…

k8s存储卷之动态

动态pv需要两个组件 1、卷插件&#xff0c;k8s本身支持的动态pv创建不包含NFS&#xff0c;需要声明和安装一个外部插件 Provisioner 存储分配器&#xff0c;动态创建pv&#xff0c;然后根据pvc的请求自动绑定和使用 2、StorageClass&#xff0c;用来定义pv的属性&#xff0c…

安全强化学习笔记

这里写自定义目录标题 参考资料环境算法CPO 2017 ICMLPCPO 2019 ICLRFOCOPS 2020 NIPSCRPO 2021 ICMLCUP 2022 NIPS TRPO 如何看懂TRPO里所有的数学推导细节? - 小小何先生的回答 - 知乎 参考资料 Safe Reinforcement Learning 安全/约束强化学习路线图&#xff08;Safe RL…

记一次 Redis 数据库迁移

笔者通过一个 Redis 数据库迁移的例子&#xff0c;介绍了迁移脚本的执行思路。 作者&#xff1a;马文斌&#xff0c;MySQL/Redis 爱好者~ 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 本文约 500 字&#xff0c;预计阅…

解决数据库事务问题的Java神奇之道: 构建高效、可靠和灵活的事务管理系统

目录 1、前言 2、数据库事务基础知识 2.1 事务的定义与特性 2.2 数据库事务隔离级别 2.3 事务的并发控制与恢复 2.4 事务管理的重要性 3、传统的事务管理方式 3.1 基于JDBC的事务管理 3.1.1 基本概念和API介绍 3.1.2 事务的隔离级别控制 3.1.3 事务的异常处理与回滚…

【Docker】数据卷挂载以及宿主机目录挂载的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Docker实战》。&#x1f3af;&#x1f3af; &…