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

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.xdnf.cn/news/1547350.html

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

相关文章

探索SQlmap:AI驱动的SQL注入神器

文章目录 探索SQLmap:AI驱动的SQL注入神器1. 背景介绍2. 什么是sqlmap?3. 如何安装sqlmap?4. 简单函数使用方法4.1 检测SQL注入4.2 获取数据库列表4.3 读取数据库中的表4.4 转储表中的数据4.5 获取当前用户信息 5. 场景应用5.1 网站后台数据泄…

C++_24_适配器

A 函数对象 概念&#xff1a; ​ 重载函数调用运算符的类实例化的对象&#xff0c;就叫函数对象.又名仿函数,函数对象和&#xff08;)触发重载函数调用运算符的执行。 作用&#xff1a; ​ 为算法提供策略 示例&#xff1a; #include <iostream> using namespace s…

刷题学习日记 (1) - SWPUCTF

写这篇文章主要是想看看自己一个下午能干啥&#xff0c;不想老是浪费时间了&#xff0c;所以刷多少题我就会写多少题解&#xff0c;使用nss随机刷题&#xff0c;但是今天下午不知道为啥一刷都是SWPUCTF的。 [SWPUCTF 2021 新生赛]gift_F12 控制台ctrlf搜索flag即可&#xff0…

【入门01】arcgis api 4.x 创建地图、添加图层、添加指北针、比例尺、图例、卷帘、图层控制、家控件(附完整源码)

1.效果 2.代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title></title><link rel"s…

物联网行业中通信断线重连现象介绍以及如何实现

01 概述 断线重连是指在计算机网络中&#xff0c;当网络连接遇到异常中断或者断开时&#xff0c;系统会自动尝试重新建立连接&#xff0c;以保证网络通信的连续性和稳定性。这是一种常见的网络通信技术&#xff0c;广泛应用于各种计算机网络场景&#xff0c;包括互联网、局域…

MSVCR100.dll丢失怎么办,教你6种解决MSVCR100.dll丢失的方法

在计算机的日常使用中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是MSVCR100.dll文件丢失。这个文件是Microsoft Visual C 2010的一个组件&#xff0c;如果丢失&#xff0c;可能会导致某些程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff…

MySQL Unittest实践(下 Gmock篇)

一、简介 使用Gtest基本上能够满足绝大多数的测试场景&#xff0c;但是对于一些涉及多个模块交互、文件系统、网络通信等复杂的场景&#xff0c;很难仿真一个真实的环境进行单元测试。这时就需要引入模拟对象Mock Objects来模拟程序的一部分来构造测试场景。 Google C Mockin…

【大数据】数据中台怎么样助力企业创新和客户实践

在当今数字化时代&#xff0c;数据成为了企业竞争的关键因素。企业拥有大量的数据&#xff0c;但如何高效地利用这些数据&#xff0c;实现创新和提升客户体验&#xff0c;成为了一项重要的挑战。数据中台作为一种重要的数据管理和分析工具&#xff0c;发挥着关键的作用。本文将…

Select插件的用法

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

今年1-8月,Temu的客户量下降了25%,Shein和TikTok Shop不降反增

根据Earnest信用卡数据&#xff0c;2024年1月至8月&#xff0c;在Temu平台上交易的购物者减少了约25%&#xff0c;表明该平台的增长放缓。 自上线两年以来&#xff0c;Temu通过打折和广告策略&#xff0c;尤其是在超级碗期间投放大量广告&#xff0c;迅速扩展并广泛影响了爱好…

分享5款AI毕业论文生成系统使用教程!开题报告一键生成!

在当前的学术研究和写作领域&#xff0c;AI论文生成工具的应用越来越广泛。这些工具不仅能够提高写作效率&#xff0c;还能帮助研究人员快速生成高质量的论文内容。今天&#xff0c;我将分享五款AI毕业论文生成系统&#xff0c;并重点推荐千笔-AIPassPaper&#xff0c;帮助你高…

自动驾驶系列—DOW(开门预警):让每一次开门都更安心

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

嵌入式项目:STM32平衡车详解 (基础知识篇) (基于STM32F103C8T6)

前言&#xff1a; 本文是基于B站草履虫编写的平衡车相关内容&#xff0c;包括模块和基础知识&#xff0c;结合代码进行讲解&#xff0c;将知识进行汇总 &#xff08;由于本篇内容较长&#xff0c;请结合目录使用) 注&#xff1a;基于开源精神&#xff0c;本文仅供学习参考 目…

滑动窗口 -- 限制窗口内某元素的数量/种类

目录 长度最小的数组 题解&#xff1a; 将x减到0的最小操作数 题解&#xff1a; 最大连续1的个数 题解&#xff1a; 无重复字符的最长子串&#xff08;限制数量&#xff09; 题解&#xff1a; 水果成篮&#xff08;限制种类&#xff09; 题解&#xff1a; 找到字符串中…

Studying-图论包含的算法总结

目录 1.DFS&#xff08;深度优先搜索&#xff09; 代码框架&#xff1a; 2. BFS&#xff08;广度优先搜索&#xff09; 代码框架&#xff1a; 3. 并查集 4.最小生成树之Prim 5.最小生成树之Kruskal 6.拓扑排序 7. 最短路径之-dijkstra&#xff08;朴素版&#xff…

淘宝霸屏必备工具:淘宝商品评论电商API接口

淘宝商品评论电商API接口是指用于获取淘宝商品评论信息的一种接口&#xff0c;通过该接口可以获取淘宝网上商品的评价内容、评价等级、评价数量等信息。通过了解并使用该接口&#xff0c;能够帮助电商了解消费者对商品的评价情况&#xff0c;做好商品的推广和销售工作。 接口使…

Leetcode - 周赛416

目录 一&#xff0c;3295. 举报垃圾信息 二&#xff0c;3296. 移山所需的最少秒数 三&#xff0c;3297. 统计重新排列后包含另一个字符串的子字符串数目 I 四&#xff0c;3298. 统计重新排列后包含另一个字符串的子字符串数目 II 一&#xff0c;3295. 举报垃圾信息 本题就是…

消息号 FS215 对科目 2221010200 7333允许销项税, J1 不允许

业务场景&#xff1a; 在做发票校验时&#xff0c;报错“消息号 FS215 对科目 2221010200 7333允许销项税, J1 不允许”而且计算税额失效&#xff0c;红灯报错。 初步怀疑是税码配置问题 FTXP J1是进项税&#xff0c;但是这里维护了销项税和均一税&#xff0c;在这里删除是需…

SQLSERVER通过触发器限制客户端IP地址

方法一&#xff1a;SQL Server 2005 SP2或更高版本(触发器) 当SQL Server 2005升级到SP2或者更高的版本的时候&#xff0c;还可以通过新增的触发器来实现控制。 执行下面的T-SQL后&#xff0c;将使除IP地址为192.168.1.1之外的客户端连接失败。 USE master; GO CREATE TRIGGE…

CMA软件检测机构人员职责分类、要求、档案资料

一、CMA软件检测机构人员职责分类&#xff1a; 1、最高管理者 2、授权签字人 3、技术负责人 4、质量负责人 5、软件测试人员 &#xff08;从事软件测试项目管理、测试需求分析、测试策划和测试设计活动的人员、软件测试执行人员&#xff09; 6、报告编制员 7、报告审核…