当前位置: 首页 > news >正文

【数据结构】队列,你必须知道的内部原理!!!

                                      🌞🌞🌞生活本就沉闷,但跑起来就会有风 ~~~

前言:

🌟🌟Hello家人们,这期讲解数据结构队列的基础知识,希望你能帮到屏幕前的你。

📚️上期博客在这里:http://t.csdnimg.cn/WJjIy

📚️感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

目录

     📚️ 1.什么是对队列

🎥1.1队列概念:

🎥1.2入队列:

🎥1.3出队列:

       📚️2.队列方法的底层模拟

🎥2.1引导:

 🎥2.2初始化链表:

 🎥2.3入队列:

 🎥2.4出队列:

  🎥2.5输出队列头元素:

  🎥2.6队列长度,打印,非空判断:

     📚️3.队列的应用

 🎬️3.1队列的方法

   🎬️3.2队列的使用代码:

     📚️4.总结语


                                             那么正片开始~~~🎬️🎬️🎬️

     📚️ 1.什么是对队列

🎥1.1队列概念:

只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出
的性质

🎥1.2入队列:

进行插入操作的一端称为队尾(Tail/Rear

🎥1.3出队列:

进行删除操作的一端称为队头(Head/front)
图片实例:
💡💡💡 总结来说,队列就是像我们平时排队一样,先到先得,第一个人站在队头,最后一
个人站在 队尾,这样是否更形象呢~~~

       📚️2.队列方法的底层模拟

                  这部分是比较重要的一部分~~~

🎥2.1引导:

       💬在上述描述中可以看到,队列用数组实现,但是当出队列时,可以看到前面的空间都浪费了,所以小编在这里将用链表进行队列的模拟。

图解如下:

💡💡可以看到,front索引前面的数据出队列后就为空了,导致前面的位置就直接浪费了。

 🎥2.2初始化链表:

代码如下:

public class Queue {// 双向链表节点public static class ListNode{  //定义内部类表示节点ListNode next;      ListNode prev;int value;ListNode(int value){this.value = value;}}ListNode first; // 队头ListNode last; // 队尾int size = 0;  //有效数据

       💬小编在这里创建了一个双向链表(双向链表博客在这里:http://t.csdnimg.cn/8vB1R)方便一系列操作,并且多初始化了一个变量表示有效数据。

 🎥2.3入队列:

代码如下:

public void offer(int e){ListNode node=new ListNode(e);if(first==null){   //判断链表是否为空first= node;last=node;}else {            //正常插入node.prev=last;last.next=node;node.next=null;last=node;}size++;             //有效数据加一}

        💬在链接节点时要进行链表是否为空的判断,如果为空,就将头结点和尾巴节点都给插入节点。反之,就直接进行正常的尾插法即可。

 🎥2.4出队列:

 代码如下:

 public int poll(){if(isEmpty()){     //判断是否为空System.out.println("队列为空,无法输出数据");return -1;}if(first==last){   //当只有一个节点时int ret=first.value;first=null;last=null;size--;return ret;}                  //正常进行链表的头节点删除int ret=first.value;first=first.next;first.prev=null;size--;            //有效数据减一return ret;}

     💬这里还是一样的在出队列时,要判断链表是否为空,在进行头节点的删除。

注意:在判空的前提上还要分多个节点和一个节点的头节点的删除情况。

  🎥2.5输出队列头元素:

代码如下:

public int peek(){if(isEmpty()){System.out.println("队列为空,没有数据");return -1;}return first.value;}

       💬这里还是要先判断链表的状态,最后返回头节点的域值的数据即可,不用做其他操作,得到值就OK。

  🎥2.6队列长度,打印,非空判断:

代码如下:

public int size() {   //获取队列的长度return size;}private boolean isEmpty(){  //判断队列是否为空if(first==null){return true;}return false;}public void display(){    //打印队列ListNode cur=first;while (cur!=null) {    //遍历链表System.out.print(cur.value + " ");cur = cur.next;}System.out.println();  //换行,方便测试}

       💬这里就相比起来,就比前面的更简单,小编就不再过多赘述。

     📚️3.队列的应用

 🎬️3.1队列的方法

注意:Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。

   🎬️3.2队列的使用代码:

代码实例:

public static void main(String[] args) {Queue<Integer> q = new LinkedList<>();q.offer(1);q.offer(2);q.offer(3);q.offer(4);q.offer(5);                   // 从队尾入队列System.out.println(q.size()); // 获取队列长度System.out.println(q.peek()); // 获取队头元素q.poll();                     System.out.println(q.poll()); // 从队头出队列,并将删除的元素返回if(q.isEmpty()){              System.out.println("队列空");}else{System.out.println(q.size());}}

      💬这里就类似于方法的调用,这里小编就通过注解来解释咯~~~

     📚️4.总结语

      💬💬小编通过前几期的链表,顺序表,栈,和本篇的队列学习发现在这些数据结构中的底层代码编译思路几乎一样,都是要熟悉对应数据结构的原理,以及对应条件判断

通过对底层模拟的实现,可以帮助我们理解对应数据结构方法的使用原理。

       🌅🌅🌅还是那句话,多练!哈哈哈~~~~最后希望与诸君共勉,共同进步!!!


                  💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

                                下期预告:栈和队列的相关例题解析🌟🌟

                                          😊😊  期待你的关注~~~

相关文章:

【数据结构】队列,你必须知道的内部原理!!!

&#x1f31e;&#x1f31e;&#x1f31e;生活本就沉闷&#xff0c;但跑起来就会有风 ~~~ 前言&#xff1a; &#x1f31f;&#x1f31f;Hello家人们&#xff0c;这期讲解数据结构队列的基础知识&#xff0c;希望你能帮到屏幕前的你。 &#x1f4da;️上期博客在这里&#xff1…...

Ubuntu24.04编译FFmpeg6.1(支持x264、x265、fdk-acc)

FFmpeg是一个开源的多媒体处理工具集&#xff0c;可以用于处理音频、视频和图片等多种媒体格式。由于其强大的功能和灵活性&#xff0c;FFmpeg被广泛应用在多媒体处理领域&#xff0c;包括音视频编解码、流媒体服务器、视频转码等。FFmpeg7.0 版本移除了 6.0 之前已弃用的 API&…...

顺序表-数据结构

一、结构定义 顺序表是通常是数组&#xff0c;要求数据连续存储。顺序表又分为定长顺序表和变长顺序表&#xff0c;本文实现后者。 1、头文件 #include <stdio.h> #include <stdlib.h> 2、定长顺序表 #define MAX 100 定长顺序表结构 typedef struct SqList {…...

如何写出更优雅的并行程序?

如何写出更优雅的并行程序&#xff1f; 并行编程关于并行编程的一些理解 并行编程 并行编程是一种利用多个处理器或计算资源同时执行多个任务的编程方式&#xff0c;以提高计算效率和性能。允许程序员编写可以在多核处理器或多个计算机节点上同时执行的程序&#xff0c;以充分…...

C#中的Hangfire和Quartz.NET 任务调度的区别

Hangfire 和 Quartz.NET 是两种常见的 C# 任务调度库&#xff0c;它们有不同的特点和使用场景。以下是这两个库的详细对比&#xff0c;包括它们的主要功能、适用场景以及关键区别。 目录 Hangfire 主要功能 适用场景 示例代码 Quartz.NET 主要功能 适用场景 示例代码 …...

银行卡二三四要素验证-银行卡二三四要素验证接口-银行卡二三四要素

接口简介&#xff1a;全面覆盖&#xff0c;支持所有带银联标识的银行卡; 高准确性-验证结果实时返回&#xff0c;准确率达99%; 高稳定性-双通道自动切换&#xff0c;保证业务不间断; 专业服务-7*24小时服务&#xff0c;极速响应&#xff0c;为用户保驾护航; 接口地址&#xff1…...

C# 设计模式之命令模式

总目录 前言 命令模式在日常中&#xff0c;也是比较常见的&#xff0c;就比如&#xff1a;妈妈和爸爸说&#xff0c;你去让孩子把地扫一下&#xff1b;这就是是一个命令&#xff0c;命令中的 下达命令的是妈妈&#xff0c;传达命令的是爸爸&#xff0c;接受命令做事的是孩子&a…...

pod详解 list-watch机制 预选优选策略 如何指定节点调度pod

K8S是通过 list-watch 机制实现每个组件的协同工作 controller-manager、scheduler、kubelet 通过 list-watch 机制监听 apiserver 发出的事件&#xff0c;apiserver 也会监听 etcd 发出的事件 scheduler的调度策略&#xff1a; 预选策略&#xff08;Predicates&#xff09;…...

深入探索:【人工智能】、【机器学习】与【深度学习】的全景视觉之旅

目录 第一部分&#xff1a;人工智能、机器学习与深度学习概述 1.1 人工智能的概念与发展 代码示例&#xff1a;简单的AI决策系统 1.2 机器学习的定义与分类 代码示例&#xff1a;简单的线性回归模型 1.3 深度学习的基础与应用 代码示例&#xff1a;构建简单的神经网络 …...

使用js和css 实现div旋转围绕圆分布排列

记录&#xff0c;以防忘记 围绕圆 import React, { useEffect } from react; import ./index.scoped.scss;const Test () > {const arr Array.from({ length: 28 }, (_, index) > index 1);useEffect(() > {const dayTotal arr.length;// 动态设置每个点的旋转角…...

SQL Server中CPU使用率过高的排查

CPU使用率过高有许多可能原因&#xff0c;但以下原因最为常见&#xff1a; 1.由于以下情况&#xff0c;表或索引扫描导致的高逻辑读取&#xff1a; 过期统计信息 缺少索引 参数敏感计划 (PSP) 问题 设计不佳的查询 2.工作负荷增加 对于安装了sqlserver的服务器&#xff0c;可…...

AUTOSAR AP常用文档前缀

AUTOSAR AP常用文档前缀总结如下表&#xff1a; 缩写全称含义EXPExplanation文档类别&#xff0c;跟踪类别 讨论其他文件中已经显示的内容的说明材料MODModel文档类别&#xff0c;跟踪类别 元级别1(模型)上的建模内容(模型或从模型生成的内容)RSRequirement Specification文档…...

服务器迁移基于Tomcat部署的java应用,没有源码怎么办?

文章目录 反编译创建java工程编译新的数据库配置类DbUtilclass文件替换到Tomcat配置的应用路径 docBase背景:非国产化项目服务器审计不通过,需要迁移到外部公司。由于项目是第三方公司开发,丢失java项目源码。 部署环境:Tomcat7,JDK1.8 涉及JAVA项目的有两个服务,一个电台…...

kafka-go使用:以及kafka一些基本概念说明

关于kafka 作为开发人员kafka中最常关注的几个概念&#xff0c;是topic,partition和group这几个概念。topic是主题的意思&#xff0c;简单的说topic是数据主题&#xff0c;这样解释好像显得很苍白&#xff0c;只是做了个翻译。一图胜前言&#xff0c;我们还是通过图解来说明。…...

景联文科技:破解数据标注行业痛点,引领高质量AI数据服务

数据标注行业是人工智能和机器学习领域中一个非常重要的组成部分。随着AI技术的发展&#xff0c;对高质量标注数据的需求也在不断增长。 数据标注市场的痛点 1. 团队管理 在众包和转包模式下&#xff0c;管理大量的标注人员是一项挑战。 需要确保标注人员的专业性、稳定性和…...

C#获取Network的相关信息

1&#xff0c;获取网络的通断。 //方法1&#xff1a;无效果&#xff0c;并不能反映当前网络通断 bool availableSystem.Windows.Forms.SystemInformation.Network//方法2&#xff1a;通过VB获取网络状态&#xff0c;可反映当前网络通断 Microsoft.VisualBasic.Devices.Network…...

Jenkins 部署Vue项目指引: Vue项目本地跨域代理 、解决ERR_UNSAFE_PORT

文章目录 引言I Jenkins 部署Vue项目配置插件安装系统配置NodeJS安装目录和别名设置新建任务(通用类型)构建环境Build Steps(构建步骤)II nginx部署站点(端口和站点目录的映射)查找Nginx配置文件端口和站点目录的映射III Vue项目本地跨域代理,屏蔽掉后端服务API的网关IP…...

C语言电子画板

目录 开头程序程序的流程图程序的效果结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们来看一下我用C语言编译的电子画板和与之相关的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> int main() …...

Android Gradle开发与应用技术原理

Android Gradle开发与应用技术原理 Android Gradle开发与应用技术原理一、概述二、Gradle构建原理1. Gradle架构2. Gradle构建过程3. 构建脚本 三、Gradle插件机制四、在Android应用中实现Text-to-Speech&#xff08;TTS&#xff09;功能1. 配置Gradle依赖2. 实现TTS功能示例代…...

Midjourney入门-提示词基础撰写与公式

​ 前言 在前几篇教程里我们已经可以初步使用Midjourney进行出图了。 包括也了解了Midjourney的指令与参数。 但如果你想用Midjourney去生成各种各样高质量的图片&#xff0c; 并且生成的图片是你想要的画面内容&#xff0c;也就是更好控制生成图片的画面内容与风格&#xf…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...