20230428 -栈与队列1 | 232. 用栈实现队列、225. 用队列实现栈、Queue和Deque异同介绍

news2024/11/28 8:46:48

1、232. 用栈实现队列

在这里插入图片描述

class MyQueue {
    //整体实现思路:队列是先进先出,栈是先进后出。使用两个栈,一个栈A负责进,一个栈B负责接收栈A数据,然后出出,队列:A->B>C 栈A:A->B>C 栈B:栈A进,C->B->A,然后出,实现A->B->C
    Stack<Integer> stackIn;
    Stack<Integer>  stackOut;
    public MyQueue() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }
    //进,只在stackIn中
    public void push(int x) {
        stackIn.push(x);
    }
    //出,出就要用到stackIn和stackOut结合
    public int pop() {
       dumpStackIn();
       return stackOut.pop(); //出,如果有元素,那就出
    }
    //获取头元素
    public int peek() {
        dumpStackIn();
        return stackOut.peek();
    }
    //判断是否为空,两个都为空才行
    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }
    public void dumpStackIn(){
        if(!stackOut.isEmpty()) return; //不为空什么都不管  
        while(!stackIn.isEmpty()){ // 没有元素,则就需要将stacIn中装到stackOut
            stackOut.push(stackIn.pop());
        }
    }
}

/**
 * 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();
 */

下面一种错误的写法,why? 错在pop和top都进行了一次移除并追加操作

public int pop() {
//弹出是,就是出栈,将要出元素的前面元素移除并添加在该队列后面即可。
int len = queue.size();
while(len>1){
queue.offer(queue.poll());
len–;
}
return queue.poll();
}
public int top() {
int len = queue.size();
while(len>1){
queue.offer(queue.poll());
len–;
}
return queue.peek();
}

class MyStack {

    //用队列实现栈,跟用栈实现队列不一样,单方向队列下,假设用一样的思维的话,第二个队列还是先进先出,并不能实现栈的思维。
    //实现过程1:可以使用两个队列,主队列出,辅助队列只是为了临时存储,出了之后又要恢复。
    //实现过程2:使用一个队列,进的时候只需要将新的元素追加到前面即可。
    Queue<Integer> queue ;
    public MyStack() {
        queue = new LinkedList<>();
    }
    
    public void push(int x) {
        queue.offer(x);
        int len = queue.size();
        while(len>1){
            queue.offer(queue.poll());
            len--;
        }
    }
    
    public int pop() {
        return queue.poll();
    }
    
    public int top() {
       return queue.peek();
    }
    
    public boolean empty() {
        return queue.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();
 */

3、补充知识

  • Queue和Deque异同介绍

  • 我们知道,Queue是队列,只能一头进,另一头出。

  • 如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque。

  • Java集合提供了接口Deque来实现一个双端队列,它的功能是:

    • 既可以添加到队尾,也可以添加到队首;
    • 既可以从队首获取,又可以从队尾获取。
      在这里插入图片描述

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

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

相关文章

一分钟教你玩转组合图表

在日常工作中&#xff0c;有时候单一的图表类型无法满足多维度的数据展示&#xff0c;这时候就要考虑使用组合图表。 什么是组合图表呢&#xff1f; 就是将两种及两种以上的图表类型组合起来绘制在一个图表上。 下面我们通过经典的柱线组合图来手把手教会你如何制作组合图表。 …

ChatGLM LoRA微调实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Kestrel封装在Winform中

Kestrel封装在Winform中 背景思路方法1方法2方法3&#xff08;本文使用的方法&#xff09; 实现在winform程序中引入几个nuget包新建一个Startup类&#xff08;叫什么名字都行&#xff09;修改Program文件创建controller 运行效果(打开浏览器&#xff0c;输入如下地址&#xff…

【高危】Apache Superset <2.1.0 认证绕过漏洞(POC)(CVE-2023-27524)

漏洞描述 Apache Superset 是一个开源的数据可视化和业务智能平台&#xff0c;可用于数据探索分析和数据可视化。 Apache Superset 受影响版本在使用默认的secret_key时&#xff0c;攻击者可通过默认的secret_key为任意用户生成有效的会话令牌&#xff0c;进而绕过验证造成信…

千耘导航让普通棉农享受到科技红利

孟师傅&#xff0c;新疆阿克苏一名普通的棉花种植户&#xff0c;从事农业20年&#xff0c;开拖拉机也有10多年&#xff0c;之前听过农机自动驾驶&#xff0c;但由于这里通信网络信号不太好&#xff0c;身边朋友使用农机导航效果不是特别理想&#xff0c;因此一直没享受到科技带…

【Python】Python学习笔记(六)字符串

字符串 基本操作 使用索引来读取字符串 Python允许使用正数或者负数来读取字符串中的某一个字符。 使用正数索引&#xff1a; #按顺序打印输出字符串内的所有字符。s ABCDEFGprint(s[0] , s[0]) print(s[1] , s[1]) print(s[2] , s[2]) print(s[3] , s[3]) print(s[4]…

计算机网络学习01

网络分层模型 1、OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f; OSI 七层模型 是国际标准化组织提出一个网络分层模型&#xff0c;其大体结构以及每一层提供的功能如下图所示&#xff1a; 每一层都专注做一件事情&#xff0c;并且每一层都需要使用下一层提…

【MySQL自学之路】第5天——对数据表数据的增删改查1

目录 前言 使用的数据库 数据表 ​编辑 表结构 插入数据&#xff08;insert into&#xff09; 插入一条数据 插入多条数据 修改数据&#xff08;update set&#xff09; 修改一条数据的值 ​编辑 修改多条数据的值 删除数据&#xff08;delete from&#xff09;…

计算机网络学习09(TCP传输可靠性保障)

1、TCP 如何保证传输的可靠性&#xff1f; 基于数据块传输 &#xff1a; 应用数据被分割成 TCP 认为最适合发送的数据块&#xff0c;再传输给网络层&#xff0c;数据块被称为报文段或段。对失序数据包重新排序以及去重&#xff1a; TCP 为了保证不发生丢包&#xff0c;就给每个…

Python德劳内三角剖分

文章目录 初步认识构造函数和属性实战-画个球 初步认识 对于熟悉matplotlib三维画图的人来说&#xff0c;最常用的应该是plot_surface&#xff0c;但这个函数的绘图逻辑是&#xff0c;将xy平面映射到z轴&#xff0c;所以没法一次性绘制球&#xff0c;只能把球分成两半&#xf…

python+nodejs+php+springboot+vue 企业仓库进销存管理系统

提供管理员管理和数据备份&#xff0c;确保信息的安全性和可靠性。仓库管理是企业的核心&#xff0c;是必不可少的一个部分。在企业的整个供应链中&#xff0c;仓库管理担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类仓库管理程序也在不断改进。本系统除了…

三大本土化战略支点,大陆集团扩大中国市场生态合作「朋友圈」

“在中国&#xff0c;大陆集团已经走过30余年的发展与耕耘历程&#xff0c;并在过去10年间投资了超过30亿欧元。中国市场也成为了我们重要的‘增长引擎’与‘定海神针’。未来&#xff0c;我们将继续深耕中国这个技术导向的市场。”4月19日上海车展上&#xff0c;大陆集团首席执…

Python中的数据类型(python专栏002)

Python 中常用的数据类型包括&#xff1a; 数字类型&#xff1a;包括整型(int)、长整型(long)、浮点型(float)、复数型(complex)。字符串类型(str)&#xff1a;用于保存文本数据&#xff0c;可以使用单引号、双引号或三引号来定义字符串。列表类型(list)&#xff1a;可以保存多…

LeetCode:19. 删除链表的倒数第 N 个结点

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;19. 删除链表的倒数第 N 个结点 题目描述&#xff1a;给你一个链表&a…

安装torch-cluster、torch-geometric、torch-scatter、torch-sparse、torch-spline-conv等库

在安装torch-cluster、torch-geometric、torch-scatter、torch-sparse、torch-spline-conv这些库时&#xff0c;要确保所下载的库与自己的torch和CUDA版本相匹配。以下是详细的步骤来找到并安装相应版本的库&#xff1a; 步骤一&#xff1a;首先&#xff0c;我们需要查看当前系…

【LeetCode】27. 消失的数字

题目链接&#xff1a;https://leetcode.cn/problems/remove-element/ &#x1f4d5;题目要求&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;…

HashMap底层源码解析及红黑树分析

HashMap线程不安全&#xff0c;底层数组链表红黑树 面试重点是put方法&#xff0c;扩容 总结 put方法 HashMap的put方法&#xff0c;首先通过key去生成一个hash值&#xff0c;第一次进来是null&#xff0c;此时初始化大小为16&#xff0c;i (n - 1) & hash计算下标值&a…

PWM输入信号转换模拟量电压电流隔离变送器1Hz~10KHz转0-10V/1-5V/4-20mA

主要特性: >>精度等级&#xff1a;0.1级。产品出厂前已检验校正&#xff0c;用户可以直接使用 >>辅助电源&#xff1a;8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号&#xff1a;0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…

有什么牌子台灯性价比高?性价比最高的护眼台灯

由心感叹现在的孩子真不容易&#xff0c;学习压力比我们小时候大太多&#xff0c;特别是数学&#xff0c;不再是简单的计算&#xff0c;而更多的是培养学生其他思维方式&#xff0c;有时候我都觉得一年级数学题是不是超纲了。我女儿现在基本上都是晚上9点30左右上床睡觉&#x…

RK3399平台开发系列讲解(FLASH篇)MTD子系统结构

平台内核版本安卓版本RK3399Linux4.4Android7.1🚀返回专栏总目录 文章目录 一、什么是MTD二、MTD系统结构沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux内核对Flash存储器有很好的支持。内核设计了一个MTD(Memory Technology Device,内存技术设备)结构支持F…