考研笔记:有关双端队列知识点的探究

2023-11-14

考研笔记:有关双端队列知识点的探究

双端队列是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构。将队列的两端分别称为前端和后端。
在这里插入图片描述 在双端队列进队时:前端进的元素排在后端进的元素前面,后端进的元素排在前端进的元素的后面。在双端队列出队时:无论前端还是后端出队,先出的元素排列在后出的元素的前面。

输出受限的双端队列:允许在一端进行插入和删除,但在另一端只允许插入的双端队列为输出受限的双端队列。
在这里插入图片描述

输入受限的双端队列:允许在一端进行插入和删除,但在另一端只允许删除的双端队列为输入受限的双端队列。
在这里插入图片描述
若以1234作为双端队列的输入序列,满足以下条件的输出队列有:
①能由输入受限的双端队列得到,不能由输出受限的双端队列得到的是4132
②能由输出受限的双端队列得到,不能由输入受限的双端队列得到的是4213
③既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的是4231

对于上述结论,建议大家根据原理动手模拟画图并仔细分析相关原因、

接下来,我们由两段源码来基本的了解一下双端队列的基本特性。

代码一:

import java.util.ArrayDeque;
public class testArrayDeque {
     public static void main(String[] args) {
		ArrayDeque AD = new ArrayDeque();
		AD.add("a");
		AD.add("b");
		AD.add("c");
		System.out.println("当前队列为:" + AD);
		//在队列的前端插入元素
		AD.addFirst("d");
		System.out.println("在前端插入元素后队列为:" + AD);
		//在队列的后端插入元素
		AD.addLast("e");
		System.out.println("在后端插入元素后队列为:" + AD);
		//在队列的前端删除元素
		AD.removeFirst();
		System.out.println("在前端删除元素后队列为:" + AD);
		AD.removeFirst();
		System.out.println("在前端删除元素后队列为:" + AD);
		//在队列的后端删除元素
		AD.removeLast();
		System.out.println("在后端删除元素后队列为:" + AD);
		AD.removeLast();
		System.out.println("在后端删除元素后队列为:" + AD);
	}
}

编译结果:

当前队列为:[a, b, c]
在前端插入元素后队列为:[d, a, b, c]
在后端插入元素后队列为:[d, a, b, c, e]
在前端删除元素后队列为:[a, b, c, e]
在前端删除元素后队列为:[b, c, e]
在后端删除元素后队列为:[b, c]
在后端删除元素后队列为:[b]

代码二:

import java.util.Deque;
import java.util.LinkedList;

public class testDeque {
    public static void main(String[] args) {   
        Deque<String> deque = new LinkedList<String>();
        deque.add("a");
        deque.add("b");
        deque.add("c");
        //输出当前队列
        System.out.println("队列为:"+deque);
 
        //从队首加入元素(队列有容量限制时用,无则用addFirst)
        deque.offerFirst("d");
        System.out.println("队首加入元素后队列为:"+deque);
        //从队尾加入元素(队列有容量限制时用,无则用addLast)
        deque.offerLast("e");
        System.out.println("队尾加入元素后队列为:"+deque);
        
        //从队尾加入元素
        deque.offer("h");
        System.out.println("队尾加入元素后为:"+deque);
        
        //获取并移除队列第一个元素,pollFirst()也是,区别在于队列为空时,removeFirst会抛出NoSuchElementException异常,后者返回null
        deque.removeFirst();
        System.out.println("获取并移除队列第一个元素后为:"+deque);
        
        //获取并移除队列第一个元素,此方法与pollLast()唯一区别在于队列为空时,removeLast会抛出NoSuchElementException异常,后者返回null
        deque.removeLast();
        System.out.println("获取并移除队列最后一个元素后为:"+deque);
        
        //获取队列第一个元素.此方法与 peekFirst() 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
        System.out.println("获取队列第一个元素:"+deque.getFirst());
        
        //获取队列最后一个元素.此方法与 peekLast() 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
        System.out.println("获取队列最后一个元素:"+deque.getLast());
        
        //循环获取元素并在队列移除元素
        while(deque.size()>0){
            System.out.println("获取元素为:"+ deque.pop()+" 并删除");
        }
        System.out.println("队列为:"+deque);
    }

}

编译结果:

队列为:[a, b, c]
队首加入元素后队列为:[d, a, b, c]
队尾加入元素后队列为:[d, a, b, c, e]
队尾加入元素后为:[d, a, b, c, e, h]
获取并移除队列第一个元素后为:[a, b, c, e, h]
获取并移除队列最后一个元素后为:[a, b, c, e]
获取队列第一个元素:a
获取队列最后一个元素:e
获取元素为:a 并删除
获取元素为:b 并删除
获取元素为:c 并删除
获取元素为:e 并删除
队列为:[]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

考研笔记:有关双端队列知识点的探究 的相关文章

  • 黑马Java品优购分布式电商项目全套视频及源码

    百度网盘链接 链接 https pan baidu com share init surl ItIpkDQ0Dwragb47HcLXKg 提取码 k5we 黑马微服务项目乐优商城全套 https blog csdn net m0 37768
  • Java生成二维码的几种实现方式(基于Spring Boot)

    本文将基于Spring Boot介绍两种生成二维码的实现方式 一种是基于Google开发工具包 另一种是基于Hutool来实现 为了方便理解二维码的实际应用场景 举一些例子 1 进销存系统 想必大家都听说过 其系统中的商品二维码承载了许多重
  • android 镜像文件img 介绍

    Android 源码 编译后 在 out target product generic下生成的三个镜像文件 ramdisk img 根文件系统 system img 包括了主要的包 库等文件 userdata img 包括了一些用户数据 以

随机推荐

  • 使用alist连接百度网盘和阿里云盘挂载到本地磁盘

    1 下载alist软件 alist软件下载地址 https github com alist org alist 跳转后 找到对应的windows版本 2 下载后解压 并启动服务 注意 alist的启动方式不是传统的双击启动 需要用命令提示
  • ios跨线程通知_一种基于Metal、Vulkan多线程渲染能力的渲染架构

    快手Y tech 原创 最新技术干货分享 随着3D渲染场景规模越来越复杂 单线程渲染架构在满足业务性能要求时已经捉襟见肘 因此 多线程渲染显得愈发重要 本文首先介绍了新一代图形渲染接口Metal Vulkan 以及它们的多线程渲染特性 然后
  • 复杂数据集,召回、精度等突破方法记录【以电科院过检识别模型为参考】

    目录 一 数据分析与数据集构建 二 所有相关的脚本 三 模型效果 一 数据分析与数据集构建 由于电科院数据集有17w 18w张 标签错误的非常多 且漏标非常多 但是所有有效时间只有半个月左右 显卡是M60 训练速度特别慢 所以需要尽量留足训
  • Audio在移动端的兼容性问题(1)

    需求 做一个SPA的web互动测试游戏 题目是自动切换播放的音频 根据音频内容选择正确选项 兼容移动端的微信 APP 浏览器和PC端的主流浏览器 准备 第一步 我们先查看兼容性 打开Can I Use CanIUse提供了各种浏览器所能支持
  • MarkDown学习笔记、语法 表格序号:41

    1 标题 需要在这段文字前面加上 再在 后加一个空格即可 还可增加二 三 四 五 六级标题 总共六级 只需要增加 增加一个 标题字号相应降低一级 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 二级标题 三级标题 四级标题 五级
  • 缓冲流【Buffered】

    缓冲流 Buffered 缓冲流我们理解为原来的使用数组方式进行数据传输的一种增强 按照类型分为 字符缓冲流 BufferedReader BufferedWriter 字节缓冲流 BufferedInputStream BufferedO
  • hive 计算日新、日活、更新历史表、用户留存

    创建日活记录表 linux gt vi user dau txt 1 zhansan 2023 02 10 2 lisi 2023 02 10 3 wangwu 2023 02 10 4 xiaohong 2023 02 10 5 aaa
  • Win10、Win11跳过联网注册微软账户激活方法

    第一次开机之后 跳过前面两个设置 我们来到联网界面 和win10不同的是 这个界面并没有预设跳过的按钮 开机重启也无法直接跳过这个步骤 所以需要通过特殊方式避过这个环节 大家可以先尝试使用下面的方法 1 按下Alt F4或者Fn Alt F
  • matplotlib设置坐标轴

    在使用matplotlib模块时画坐标图时 往往需要对坐标轴设置很多参数 这些参数包括横纵坐标轴范围 坐标轴刻度大小 坐标轴名称等 在matplotlib中包含了很多函数 用来对这些参数进行设置 plt xlim plt ylim 设置横纵
  • 八十三.0~1间的浮点实数的二进制表示 (位运算)

    给定一个介于0和1之间的实数 如0 625 类型为double 打印它的二进制表示 0 101 如果该数字无法精确地用32位以内的二进制表示 则打印 ERROR import java util Scanner public class L
  • 需求变化频繁的情况下,如何实施自动化测试

    一 通常来说 具备以下3个主要条件才能开展自动化测试工作 1 需求变动不频繁 自动化测试脚本变化的频率决定了自动化测试的维护成本 如果需求变动过于频繁 那么测试人员就需要根据变动的需求来不断地更新自动化测试用例 从而适应新的功能 而脚本的维
  • 论:单链表

    醉里挑灯看剑 梦回吹角连营 前言 本篇总结对于单链表的基本操作 创建 插入 删除 索引 用 语言实现 加深对于单链表的使用 目录 定义链表结构 节点的建立 头节点的建立 插入新的节点 从链表头插入节点 从链表尾部插入 从指定位置插入 删除节
  • Spring Boot的自动配置原理

    一 原理解释 Spring Boot的自动配置是Spring框架的一个重要特性 它旨在简化应用程序的开发和部署过程 自动配置通过基于类路径中的依赖关系和配置文件内容来预先配置Spring应用程序的各种组件和功能 这样 我们可以在无需显式配置
  • 【华为上机真题】工号不够用咋办

    作者 Linux猿 简介 CSDN博客专家 华为云享专家 Linux C C 云计算 物联网 面试 刷题 算法尽管咨询我 关注我 有问题私聊 关注专栏 数据结构和算法成神路 精讲 优质好文持续更新中 欢迎小伙伴们点赞 收藏 留言 目录 一
  • android适配分辨率(hdpi,mdpi,ldpi)及横竖屏

    http jianxiaza blog 163 com blog static 87685628201131471635563 MUST HAVE ROOT ACCESS Open Root Explorer Open System fol
  • 《深入理解Java虚拟机 1》Java内存区域与内存分配策略

    本系列是用来记录 深入理解Java虚拟机 这本书的读书笔记 方便自己查看 也方便大家查阅 欲速则不达 欲达则欲速 第一章 走进Java 一 Java虚拟机发展史 这部分一带而过吧 有兴趣的可以阅读原著 二 Java内存管理 class文件结
  • Linux(CentOS7)下rpm方式安装SNMP服务

    一 准备文件 安装snmp服务需要的rpm包 perl Data Dumper 2 145 3 el7 x86 64 rpm net snmp libs 5 7 2 28 el7 4 1 x86 64 rpm net snmp utils
  • 华为od机考真题-数大雁,1419,数青蛙

    数大雁 https leetcode cn problems minimum number of frogs croaking submissions 怎么确认最少的个数呢 我们找到第一个q和第一个k的下表 在这个范围存在q的数量且q可以在
  • 最全的ASCII码对照表

    十进制代码 十六进制代码 MCS 字符或缩写 DEC 多国字符名 ASCII 控制字符 1 0 0 NUL 空字符 1 1 SOH 标题起始 Ctrl A 2 2 STX 文本起始 Ctrl B 3 3 ETX 文本结束 Ctrl C 4
  • 考研笔记:有关双端队列知识点的探究

    考研笔记 有关双端队列知识点的探究 双端队列是指允许两端都可以进行入队和出队操作的队列 其元素的逻辑结构仍是线性结构 将队列的两端分别称为前端和后端 在双端队列进队时 前端进的元素排在后端进的元素前面 后端进的元素排在前端进的元素的后面 在