7 月12日学习打卡--栈和队列的相互转换

news2024/12/26 23:49:58

hello大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不足之处也请指出,谢谢大家。

前言

为了更深入理解栈和队列,本篇博客我将介绍力扣上两道栈和队列的转化问题。

一,力扣225,用队列实现栈

. - 力扣(LeetCode)

我们知道栈的特点是先进后出,队列是先进先出,因此,我们需要两个队列才能实现一个栈,通过队列中元素的转移来获取我们想要删除的元素,下面逐一介绍各个方法

1:push

根据后面的pop()方法和我们需要实现栈的特性可知,我们每次需要在两个队列中非空的队列中插入元素(插入元素肯定是插在一个队列中),如果都为空,则指定一个队列插入

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

2.empty

我们先看empty,因为后面方法需要用到,显然,两个队列均为空则模拟栈空

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

3.pop

pop方法我们的思路是如果哪个队列不空,则把队列中的size-1个元素移动到另一个队列,剩下的便是不需要的数(虽然看起来代码多但是else里的只需要把if里的改下就行)

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

4.empty

与pop类似,只是我们不需要删除元素,而且需要一个整形纪录栈顶元素

public int top() {
        if (empty()){
            return -1;
        }

        if(!q2.isEmpty()){
            int size=q2.size();
            int val=0;
            for (int i = 0; i < size; i++) {
                val=q2.poll();
                q1.offer(val);
            }
            return val;
        }else {
            int size=q1.size();
            int val=0;
            for (int i = 0; i < size; i++) {
                val=q1.poll();
                q2.offer(val);
            }
            return val;
        }
    }

完整代码

class MyStack {
    Queue<Integer> q1;
    Queue<Integer> q2;
    public MyStack() {
         q1=new LinkedList();
         q2=new LinkedList();

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

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

    public int top() {
        if (empty()){
            return -1;
        }

        if(!q2.isEmpty()){
            int size=q2.size();
            int val=0;
            for (int i = 0; i < size; i++) {
                val=q2.poll();
                q1.offer(val);
            }
            return val;
        }else {
            int size=q1.size();
            int val=0;
            for (int i = 0; i < size; i++) {
                val=q1.poll();
                q2.offer(val);
            }
            return val;
        }
    }

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

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */

二,力扣232,用栈实现队列

. - 力扣(LeetCode)

思路:和上面类似,不过这里push方法都是放到第一个栈,出队操作分两步:

1.判断第二个栈是不是空的?如果是,则把第一个栈中所有元素都放到第二个栈里,取出第二个栈当中的栈顶元素。

2.如果不是空的,直接取出第二个栈中的栈顶元素

代码:

class MyQueue {
    Stack<Integer> s1;
    Stack<Integer> s2;

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

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

    public int pop() {
        if (empty())
            return -1;
        if (s2.isEmpty()) {
            int size = s1.size();
            for (int i = 0; i < size; i++) {
                s2.push(s1.pop());
            }
            return s2.pop();
        } else {
            return s2.pop();
        }

    }

    public int peek() {
        if (empty())
            return -1;
        if (s2.isEmpty()) {
            int size = s1.size();
            for (int i = 0; i < size; i++) {
                s2.push(s1.pop());
            }
            return s2.peek();
        } else {
            return s2.peek();
        }

    }

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

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue obj = new MyQueue();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.empty();
 */

好了,今天练车耽误了一下,今天就到这里吧,谢谢大家

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

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

相关文章

如何写一个好标题,让你的论文接受率提升300%?(附公式模版)

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 一篇论文的标题虽然只有短短2-3行&#xff0c;一般不超过15个单词&#xff0c;但是不可否认&#xff0c;标题的阅读量是最大的&#xff0c;因为你只有先通过标题激发了审稿人和…

大模型备案,这样操作就对了!全程指导助你成功备案

在人工智能技术日新月异的今天&#xff0c;大型语言模型&#xff08;简称“大模型”&#xff09;作为AI领域的璀璨明珠&#xff0c;正逐步渗透到我们生活的方方面面&#xff0c;从智能客服到内容创作&#xff0c;从个性化推荐到医疗健康&#xff0c;其影响力不可小觑。 然而&am…

一个极简的 Vue 示例

https://andi.cn/page/621516.html

Linux 04:进程概念

1. 操作系统(Operator System) 概念 任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括&#xff1a; 内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;文件管理&#xff0c;驱动管理&#xff09;。其他程序…

虚幻引擎 快速的色度抠图 Chroma Key 算法

快就完了 ColorTolerance_PxRange为容差&#xff0c;这里是0-255的输入&#xff0c;也就是px单位&#xff0c;直接用0-1可以更快 Key为目标颜色

安全防御-用户认证综合实验

一、拓扑图 二、实验要求 1、DMZ区的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9:00-18:00&#xff09;可以访问&#xff0c;生产区设备全天都是可以访问的 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设备10.0.2.20不允许访…

0601STM32TIM

TOC 分为四部分&#xff0c;八小节 一部分&#xff1a;主要讲定时器基本定时的功能&#xff0c;也就是定一个事件&#xff0c;让定时器每隔这个时间产生一个中断&#xff0c;来实现每隔一个固定时间来执行一段程序的目的&#xff0c;比如做一个时钟、秒表&#xff0c;或者使用一…

求问DAMASK求解中关于yaml文件,报错显示:type dismatch in yaml date node

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

【eNSP模拟实验】单臂路由实现VLAN间通讯(复杂案例)

实验需求 如下图所示&#xff0c;PC1和PC2在vlan10下&#xff0c;PC3和PC4在vlan20下&#xff0c;Server1在vlan30下&#xff0c;需要实现这5台设备之间互相通讯。 实验操作 配置各个终端的ip地址 PC1~PC4都按照下图进行配置&#xff08;注意ip地址和网关有不同的地方&#…

Ubuntu 修改~/.bashrc终端选择是否使用annconda环境

首先需要明白的是anaconda虽然自带了python&#xff0c;但安装anaconda后并不会覆盖掉你原来的python&#xff08;pip也是一样的&#xff09;&#xff0c;但安装anaconda后它会把自己的bin目录&#xff08;里面有python、pip、conda等命令&#xff09;加到PATH上&#xff0c;而…

小程序指南--小程序运行时

第一节 运行环境 小程序可以运行在不同环境中&#xff0c;如下&#xff1a; 1、ios/iPad os 微信客户端 2、Android 微信客户端 3、Windows Pc 微信客户端 4、Mac 微信客户端 5、小程序硬件框架 6、微信开发者工具 那么小程序逻辑层的脚本执行和组件渲染环境不同&…

【MySQL基础篇】事务

事务简介 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 典型事例&#xff1a;银行转账操作 假设张三向李四进行转账…

MySQL 9.0 新功能概览

官方文档 https://dev.mysql.com/doc/refman/9.0/en/mysql-nutshell.html 时隔 6 年多&#xff0c;上周 Oracle 发布了 MySQL 最新的大版本 9.0。我们一起来看看新版本有哪些东西。 用 JavaScript 写存储过程 半年前已经单独介绍过 「虽迟但到&#xff01;MySQL 可以用 Java…

信息打点web篇--详解cdn识别与绕过

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文着重整理渗透过程中 cdn的相关知识点 cdn简要说明 我们一台服务器如果让外界访问&#xff0c;距离我们服务器近的地区访问的速度快&#xff0c;而远的地区访问速度则会大大减低。为了保证远区域用户的体验&a…

VR头显如何低延迟播放8K的RTSP|RTMP流

技术背景 我们在做Unity平台RTSP、RTMP播放器的时候&#xff0c;有公司提出来这样的技术需求&#xff0c;希望在头显播放全景的8K RTSP|RTMP直播流&#xff0c;8K的数据&#xff0c;对头显和播放器&#xff0c;都提出了新的要求&#xff0c;我们从几个方面&#xff0c;探讨下V…

Lingo学习(一)——基本界面、解方程、变量

一、Lingo基本界面 【步骤】 1.双击打开Lingo 2.弹出一个对话框,点击Cancel左边的Never Register即可,其余内容用不到。 3:界面自动弹出名为“Lingo Model – Lingo 1”的窗口,用于书写代码。 4:以解方程的题目:x12为例,写完代码后,点击“红色的靶心”运行程序。 5:首先Lin…

昇思学习打卡-13-LLM原理与实践/解码原理--以MindNLP为例

文章目录 搜索方法集束搜索(beam search)贪心搜索(greedy search) 采样池处理结果 一个文本序列的概率分布可以分解为每个词基于其上文的条件概率的乘积 搜索方法 集束搜索(beam search) Beam search通过在每个时间步保留最可能的 num_beams 个词&#xff0c;并从中最终选择出…

代码随想录-暑假算法第一天(数组篇)

代码随想录-暑假算法第一天(数组篇) 1. 二分查找 力扣题目链接(opens new window) 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否…

超酷的3D立体文字?分享 1 段优质 CSS 代码片段!

本内容首发于工粽号&#xff1a;程序员大澈&#xff0c;每日分享一段优质代码片段&#xff0c;欢迎关注和投稿&#xff01; 大家好&#xff0c;我是大澈&#xff01; 本文约 500 字&#xff0c;整篇阅读约需 1 分钟。 今天分享一段优质 CSS 代码片段&#xff0c;实现了超酷的3…

SPI协议与读写串行 FLASH

SPI 协议简介 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是美国摩托罗拉公司&#xff08;Motorola&#xff09;最先推出的一种同步串行传输规范&#xff0c;也是一种单片机外设芯片串行扩展接口&#xff0c;是一种高速、全双工、…