代码随想录算法训练营第10天 232.用栈实现队列、225. 用队列实现栈

news2025/1/15 22:48:27

代码随想录算法训练营第10天 232.用栈实现队列、225. 用队列实现栈

用栈实现队列

力扣题目链接(opens new window)

使用栈实现队列的下列操作:

push(x) – 将一个元素放入队列的尾部。
pop() – 从队列首部移除元素。
peek() – 返回队列首部的元素。
empty() – 返回队列是否为空。

使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。

232.用栈实现队列版本2

在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。

/**
 * @description: 用栈实现队列
 * @author: 刘宇浩
 * @date: 2023/1/12 1:00
 */
public class MyQueue {

    public Stack<Integer> in;
    public Stack<Integer> out;

    public MyQueue() {
        in = new Stack<>();
        out = new Stack<>();
    }

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

    public int pop() {
        while (!in.empty()) {
            out.push(in.pop());
        }
        Integer res = out.pop();
        while (!out.empty()) {
            in.push(out.pop());
        }
        return res;
    }

    public int peek() {
        while (!in.empty()) {
            out.push(in.pop());
        }
        Integer res = out.pop();
        out.push(res);
        while (!out.empty()) {
            in.push(out.pop());
        }
        return res;
    }

    public boolean empty() {
        return in.empty();
    }
}

用队列实现栈

力扣题目链接(opens new window)

使用队列实现栈的下列操作:

  • push(x) – 元素 x 入栈
  • pop() – 移除栈顶元素
  • top() – 获取栈顶元素
  • empty() – 返回栈是否为空

一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时再去弹出元素就是栈的顺序了。

/**
 * @description: 用队列实现栈
 * @author: 刘宇浩
 * @date: 2023/1/12 1:07
 */
public class MyStack {
    public Deque<Integer> queue;

    public MyStack() {
        queue = new ArrayDeque<>();
    }

    public void push(int x) {
        queue.addLast(x);
    }

    public int pop() {
        int size = queue.size();
        size--;
        while (size-- > 0) {
            queue.addLast(queue.peekFirst());
            queue.pollFirst();
        }
        return queue.pollFirst();
    }

    public int top() {
        return queue.peekLast();
    }

    public boolean empty() {
        return queue.isEmpty();
    }
}

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

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

相关文章

十分好用的跨浏览器测试工具,建议收藏!!!

跨浏览器测试是确保web应用程序的功能在不同浏览器、浏览器版本和操作系统直接保持功能和质量一致的过程&#xff0c;可以为用户提供更好的用户体验&#xff0c;帮助企业通过更易访问的网站获得满意客户&#xff0c;可以使web应用程序在不同平台上兼容。在跨浏览器测试过程中&a…

Vulnhub靶机:DIGITALWORLD.LOCAL_ DEVELOPMENT

目录介绍信息收集主机发现主机信息探测网站探测SSH登录lshell绕过sudo提权介绍 系列&#xff1a;digitalworld.local&#xff08;此系列共9台&#xff09; 发布日期&#xff1a;2018 年 12 月 28 日 难度&#xff1a;中级 运行环境&#xff1a;Virtualbox运行失败&#xff0c;…

写作的“收益”超乎想象

十余年写作经验倾囊相授&#xff0c;全面提升你的技术写作能力&#xff01; 前言 技术从业人员普遍比较务实&#xff0c;也就是用心做好分配给自己的任务&#xff0c;努力担负起自己应尽的责任&#xff0c;因为大家都相信&#xff0c;付出必有回报&#xff0c;金字总会闪光。 …

【干货】普通单双面板的生产工艺流程(二)

衔接上文&#xff0c;继续为朋友们分享普通单双面板的生产工艺流程。 如图&#xff0c;第二道主流程为钻孔。 钻孔的目的为&#xff1a; 对PCB进行钻孔&#xff0c;便于后续识别、定位、插件及导通。 目前&#xff0c;行业内主流的PCB钻孔方式为&#xff1a;机械钻孔、激光钻…

引蜘蛛软件哪款有效果?多少钱怎么购买?

引蜘蛛软件哪款有效果?多少钱怎么购买?怎教你查看一个IP地址是不是搜索引擎官方蜘蛛的参考方法#IP地址#官方蜘蛛#搜索引擎官 大家好&#xff0c;今天给大家分享的是关于怎么查看一个 ip 地址是不是搜索引擎官方蜘蛛的参考方法。 很多做网站的小伙伴们肯定会用到这个方式。 有…

用 Python 制作空间数据可视化

大数据时代到来&#xff0c;随着智能设备与物联网技术的普及&#xff0c;人在社会生产活动中会产生大量的数据。在我们的日常活动中&#xff0c;手机会记录下我们到访过的地点&#xff1b;在使用城市公交IC卡、共享单车等服务时&#xff0c;服务供应商会知道这些出行需求产生的…

gdb相关知识

cdir和cwd 当我们用gdb的命令show dir的时候&#xff0c;显示源码搜寻目录&#xff1a; cdir: 代表编译路径&#xff0c;可以打个断点&#xff0c;然后用info source命令查看。 cwd: 代表当下调试的目录&#xff0c;直接用pwd就可以。 添加新的搜索路径 dir /opt/nmt搜索路…

Gemini撕DCG诉感情被骗,灰度百亿大饼持仓却不会爆雷?

插播&#xff1a;《刘教链比特币原理》音频课正在连载中。今天次条是第一章第2节“1-2 比特币的特点和使用”&#xff0c;推荐每一位读者学习。点击此处查看付费合集详情[链接]以及上一课“1-1 五分钟告诉你什么是比特币和区块链”[链接]。* * *比特币今晨突然急速上涨&#xf…

Qt OpenGL(09)在着色器中实现旋转的彩色正方体

文章目录在着色器中实现旋转的彩色正方体旋转矩阵沿x轴旋转&#xff1a;沿y轴旋转&#xff1a;沿z轴旋转&#xff1a;在顶点着色器中实现顶一个vec3的变量 theta计算余弦和正弦值定义3个旋转矩阵最终代码在着色器中实现旋转的彩色正方体 一直觉得用OpenGL 画一个立方体或者彩色…

黑马学ElasticSearch(八)

目录&#xff1a; &#xff08;1&#xff09;黑马旅游案例-搜素-分页 &#xff08;2&#xff09;黑马旅游案例-条件过滤 &#xff08;3&#xff09;黑马旅游案例-我附近的酒店 &#xff08;4&#xff09;黑马旅游案例-广告置顶 &#xff08;1&#xff09;黑马旅游案例-搜素…

C语言 自定义类型 之 【结构体】

文章目录前言结构体类型的声明结构的自引用结构体变量的定义和初始化定义初始化结构体内存对齐结构体传参结构体实现位段什么是位段&#xff1f;位段的内存分配位段的跨平台问题位段的应用写在最后前言 C语言中结构体是一种用户自定义的数据类型&#xff0c;它相当于一个小型的…

Python3 微信支付(小程序支付)V3接口

起因&#xff1a; 因公司项目需要网上充值功能&#xff0c;从而对接微信支付&#xff0c;目前也只对接了微信支付的小程序支付功能&#xff0c;在网上找到的都是对接微信支付V2版本接口,与我所对接的接口版本不一致&#xff0c;无法使用&#xff0c;特此记录下微信支付完成功能…

中缀表达式怎么转后缀表达式

对于中缀表达式&#xff1a;1 2 * 3 中缀表达式是相对于人来说的&#xff0c;因为我们人是会判断和*的运算优先级谁高谁低 但是计算机是不会判断的&#xff0c;因为计算机是默认从左向右读取数据&#xff0c;它先遇到 就会计算&#xff0c;其结果是不对的。它不会提前看到后面…

使用nvm实现多个Node.js版本之间切换

使用nvm实现多个Node.js版本之间切换1.先卸载掉本系统中原有的node版本。2.去github上下载nvm安装包3.安装node常用的一些nvm命令什么是nvm&#xff1f; nvm是一个简单的bash脚本&#xff0c;它是用来管理系统中多个已存的Node.js版本。这样做主要是我的vue项目对node的版本有…

6.3、动态主机配置协议 DHCP

1、DHCP的作用 如下所示&#xff0c;我们如何配置用户主机&#xff0c;才能是用户主机正常访问网络中的 Web 服务器 即&#xff1a;需要给网络中的各主机正确配置 IP 地址、子网掩码、默认网关、DNS 服务器等网络相关配置信息 例如&#xff1a;如下所示&#xff0c;手工配置的…

Wind X R2 蓝牙5.2双模热插拔PCB

键盘使用说明索引&#xff08;均为出厂默认值&#xff09;软件支持一些常见问题解答&#xff08;FAQ&#xff09;首次使用测试步骤蓝牙配对规则&#xff08;重要&#xff09;蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功能层1配置的功能默认的快捷键蓝牙参数蓝牙…

从图谱看美创,全面覆盖《数据安全产品与服务图谱2.0》

第二届数据安全治理峰会上&#xff0c;《数据安全产品与服务图谱2.0》&#xff08;下简称&#xff1a;图谱2.0&#xff09;正式发布。图谱2.0在原图谱框架的基础上实现了更具体系化、层次化的升级迭代&#xff0c;旨在进一步打通供需双方对当前主流数据安全产品与服务的认知&am…

element table数据量太大导致网页卡死崩溃

做后台项目时&#xff0c;一次性在表格中加载几百上千条数据&#xff0c;发现有时页面会崩溃。究其原因&#xff0c;发现是一次渲染dom太多导致卡顿。在此尝试了多种解决方法&#xff0c;发现最优的就是替换组件&#xff0c;elementUI中的表格组件el-table性能不优&#xff0c;…

【Linux】除了Linux基础命令外 你还应知道的命令

Linux基础命令补充一、Linux版本信息:二、云服务器的登录方法三、Linux指令1.whoami显示当前用户名2.cd加特殊符号3.stat查看文件的所有的属性4.echo用于在终端设备上输出指定字符串5.wc统计文件的字节数、单词数、行数等信息6.|管道操作符7.sort对文件内容按照ASCII码值进行排…

Node.js篇-安装与配置,基本使用,服务器,项目搭建,调试

1.安装与配置官网下载, 并配置环境变量查看安装成功/版本号: DOS命令 node -v运行JS文件: node 文件名.js2.基本使用(1)CommonJS模块化Node.js遵循了CommonJS模块化规范( e.g: 自定义模块 )使用module.exports 导出// commonjs模块化开发 function sum(){ //代码 } function…