队列的基本概念以及模拟使用

news2024/9/29 5:34:36

1.队列的概念:

只允许在一端进行插入数据操作,在另一端进行删除数据操作的线性表,队列具有先进先出FIFO           入队列 :进行插入操作的一端称为队尾.

       出队列:进行删除操作的一端称为队头。

图例如下:

2.Queue是一个接口,底层是通过链表实现的

2.队列对应的一些方法:

3.模拟队列的实现:

底层以双向链表为例:

其结构和双向链表类似,包括:前驱指针,后驱指针,数据域

构造方法:数据域的传入。

队头、队尾、以及有效元素个数的定义。

具体代码如下:

public class MyQueue {
    //双向链表创建队列
    public static class ListNode{
      public ListNode next; //前驱节点
       public  ListNode prev; //后驱节点
        public int val;

        ListNode(int val)
        {
            this.val = val;
        }
    }
       public ListNode first = null; // (队头)头节点
       public ListNode last = null; //(队尾)尾节点
       public int usedSize = 0; //有效元素

3.1:offer(入队列)功能的实现:

创建一个新节点node来接受val的值

在尾插之前,判断链表是否为空(第一次插入,有效元素为0)如果是第一次插入,则队头队尾均为node。

若不是第一次插入,进行尾插操作:

具体代码如下:

 public void offer(int val){
         ListNode node = new ListNode(val);
         if(isEmpty()){
             first = last = node;
         }else{
             last.next = node;
             node.prev = last;
             last = last.next;
         }
         usedSize++;

     }

 public boolean isEmpty(){
         return usedSize == 0;  (有效元素为零,返回false,继续执行 否则为true,退出)
              }
}

3.2 出队列功能的实现:

  1. 出栈操作:当调用出栈方法时,你首先需要检查队列是否为空(即 first 是否为 null)。如果队列不为空,你将执行出栈操作。

  2. 移动头节点:在将 first 指向下一个节点后,新的 first 可能为 null,这表示队列已经为空。

  3. 更新前驱指针

    • 如果 first 不为空:这意味着队列仍然有元素。在这种情况下,新的 first 的 prev 应该被设置为 null,以表示它是新的队头节点。
    • 如果 first 为空:这意味着所有节点都已经被移除,因此就不需要更新 first.prev。此时,last 也应被设置为 null,表示队列已经完全空了。
  4. 具体代码如下:
    public int poll() {
        if (first == null) { // 检查队列是否为空
            return null;     // 如果为空,返回 null
        }
        int value = first.val; // 获取队头元素
        first = first.next;    // 移动头节点
        if (first != null) {   // 如果队列不为空,更新头节点的前驱
            first.prev = null; // 将新队头节点的前驱设置为 null
        } else {               // 如果队列为空,更新尾节点
            last = null;       // 更新尾节点为 null
        }
        usedSize--;
        return value;         // 返回出队的值
    }

3.2:peek(获取队头元素的实现:)

判断队列是否为空,如果为空,返回-1,否则返回first队头的值

具体代码如下:

   public int peek(){
            //获取栈顶元素
                  if(isEmpty()){
                      return -1; //链表为空
                  }
                  return first.val;
              }
              public boolean isEmpty(){
         return usedSize == 0;
              }

今天的分享就到这里,喜欢的老铁来个三联吧!

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

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

相关文章

Select插件的用法

文章目录 1.知识回顾2.使用方法2.1 builder属性2.2 selector属性2.3 shouldRebuild属性2.4 child属性3 示例代码我们在上一章回中介绍了组件之间共享数据相关的内容,本章回中将继续介绍该内容.闲话休提,让我们一起Talk Flutter吧。 1.知识回顾 我们在前面章回中介绍了全局共…

Ubuntu 开机自启动 .py / .sh 脚本,可通过脚本启动 roslaunch/roscore等

前言 项目中要求上电自启动定位程序,所以摸索了一种 Ubuntu 系统下开机自启动的方法,开机自启动 .sh 脚本,加载 ROS 环境的同时启动 .py 脚本。在 . py 脚本中启动一系列 ROS 节点。 一、 .sh 脚本的编写 #!/bin/bash # gnome-terminal -- …

MyBatis-Plus代码生成器的使用

简介 AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码&#xff0c;极大的提升了开发效率。 创建 Maven 工程 添加依赖 <?xml version"1.0" encod…

哈希表(一)

一、基础知识 哈希表的优点&#xff1a; 查找key的时间效率是O&#xff08;1&#xff09; 什么时候要用到哈希表&#xff1a; 查询元素的出现问题&#xff08;是否出现过&#xff0c;是否在集合里&#xff0c;出现次数等&#xff09; 哈希表的三种数据结构&#xff1a; 数组…

从自身经历浅谈对于C++/Java的认识

1.声明 因为一些其他的原因&#xff0c;我决定从C转到java方向学习&#xff0c;后期可能就要换方向了&#xff0c;以后主要学习这个java相关的这个技术了&#xff0c;起码暂时不会学习这个C里面的内容了&#xff1b; 2.我的感慨 当时选方向的时候&#xff0c;我自己就是选的…

甘蔗茎节检测系统源码分享

甘蔗茎节检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

插座检测系统源码分享

插座检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

Docker 天池代码提交

参考零基础入门Docker-cuda练习场_学习赛_天池大赛-阿里云天池的赛制 (aliyun.com) ​ 在Docker零基础入门-CSDN博客中我已经安装了docker,现在开始创建自己的镜像仓库。 1. 开通阿里云容器镜像服务(镜像仓库) 进入容器镜像服务 (aliyun.com) 1.1. 创建个人实例 点击“…

.net 未能加载文件或程序集“System.Diagnostics.DiagnosticSource, Version=6.0.0.1 解决方案

.net webapi 项目以前用的正常&#xff0c;重装server2019后&#xff0c;又把oracle客户端从11g升级成19c&#xff0c;修改了连接字符串后&#xff0c;其他网站都正常&#xff0c;唯独这个webapi报错 报错信息&#xff1a; 未能加载文件或程序集“System.Diagnostics.Diagnos…

Elasticsearch黑窗口启动乱码问题解决方案

问题描述 elasticsearch启动后有乱码现象 解决方案&#xff1a; 提示&#xff1a;这里填写该问题的具体解决方案&#xff1a; 到 \config 文件下找到 jvm.options 文件 打开后 在文件末尾空白处 添加 -Dfile.encodingGBK 保存后重启即可。

精密制造的革新:光谱共焦传感器与工业视觉相机的融合

在现代精密制造领域&#xff0c;对微小尺寸、高精度产品的检测需求日益迫切。光谱共焦传感器凭借其非接触、高精度测量特性脱颖而出&#xff0c;而工业视觉相机则以其高分辨率、实时成像能力著称。两者的融合&#xff0c;不仅解决了传统检测方式在微米级别测量上的局限&#xf…

MySQL 应对大量并发连接之道

《》 在当今的互联网时代&#xff0c;数据库面临着越来越多的并发连接请求。对于 MySQL 来说&#xff0c;如何有效地处理大量的并发连接成为了一个关键问题。本文将探讨 MySQL 处理大量并发连接的方法和策略。 一、并发连接带来的挑战 当 MySQL 数据库面临大量并发连接时&am…

使用 sponge + dtm 轻松实现秒杀抢购服务(HTTP),彻底解决库存与订单数据不一致的难题

秒杀场景的挑战 秒杀是电商中常见的抢购商品场景&#xff0c;其技术特点是瞬间请求量巨大&#xff0c;对服务的性能和一致性要求极高。即使服务出现崩溃&#xff0c;也必须确保库存扣减和订单生成保持一致&#xff0c;避免出现超卖或超买的现象。通过使用 dtm&#xff08;分布…

基于Springboot+Vue的高校体育运动会比赛系统(含源码+数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 该系统…

根据软件架构设计与评估的叙述开发一套机器学习应用开发平台

案例 阅读以下关于软件架构设计与评估的叙述&#xff0c;回答问题 1和问题 2。 【说明】 某公司拟开发一套机器学习应用开发平台&#xff0c;支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。该平台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程&…

如何用一段文字或一张图片生成一段视频?

找了下AI视频工具的排行&#xff0c;发现在这款国内好多大模型的AI视频工具都排在前面。测试了好几款&#xff0c;整体感觉还是非常不错&#xff0c;除了生成的时间比较短&#xff0c;清晰度和效果比自己找的会好很多。 AI视频工具文成视频成品展示 一个视频生成的时间大概是5-…

【CTF刷题8】2024.9.26

ps:源自CTFhub 基础认证&#xff1a; 在HTTP中&#xff0c;基本认证&#xff08;英语&#xff1a;Basic access authentication&#xff09;是允许http用户代理&#xff08;如&#xff1a;网页浏览器&#xff09;在请求时&#xff0c;提供 用户名 和 密码 的一种方式。详情请查…

什么是智慧党建?可视化大屏如何推动高质量党建?

在数字化时代&#xff0c;党建工作迎来了新的发展机遇。智慧党建&#xff0c;作为新时代党建工作的创新模式&#xff0c;正逐渐成为推动党的建设向高质量发展的重要力量。它不仅改变了传统的党建工作方式&#xff0c;还通过现代信息技术的应用&#xff0c;提升了党建工作的效率…

HttpSession使用方法及原理

HttpSession使用方法及原理 一、HttpSession使用流程说明二、登录概述具体 三、访问过程概述具体 一、HttpSession使用流程说明 1.用户发送登录请求到服务器。 2.服务器处理登录请求&#xff0c;调用userService.login(loginUser)。 3.如果登录成功&#xff0c;服务器调用requ…

LeetCode(Python)-贪心算法

文章目录 买卖股票的最佳时机问题穷举解法贪心解法 物流站的选址&#xff08;一&#xff09;穷举算法贪心算法 物流站的选址&#xff08;二&#xff09;回合制游戏快速包装 买卖股票的最佳时机问题 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。如果你…