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

队列(Queue):先进先出的数据结构队列

栈与队列icon-default.png?t=N6B9https://blog.csdn.net/qq_45467165/article/details/127958960?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127958960%22%2C%22source%22%3A%22qq_45467165%22%7D

队列(Queue)是一种常见的线性数据结构,它遵循先进先出(First-In-First-Out,FIFO)的原则,类似于现实生活中排队的场景。在队列中,首先进入队列的元素将首先被移出队列。队列在计算机科学中有着广泛的应用,例如任务调度、打印任务管理、广度优先搜索等。

队列的基本原理

队列的基本操作包括入队(Enqueue)和出队(Dequeue)。入队操作将元素添加到队列的尾部,而出队操作则从队列的头部移除元素。这保证了先进入队列的元素会先被移出,实现了先进先出的特性。

注意

假设我们有一个数组,数组的前部表示队头,后部表示队尾,

[队头, 元素1, 元素2, ..., 元素N, 队尾] 

在刚开始时,队列为空,队头和队尾都位于数组的同一个位置。随着元素的入队,队尾不断向后移动;随着元素的出队,队头不断向后移动。

当执行入队操作时,我们将元素添加到队列的末尾,即队尾位置向后移动一个位置,然后将元素放在新的队尾位置上。这保证了新的元素总是被添加到队列的末尾。

当执行出队操作时,我们将队头位置向后移动一个位置,表示当前队头元素被移出队列。这样,队头所指向的元素就被出队,而队列中的其他元素保持不变。

通过这种方式,队列的元素始终按照入队的先后顺序排列在数组中,队头和队尾不断向后移动,实现了先进先出的特性。

需要注意的是,当队列的元素数量达到队列的容量上限时,继续执行入队操作将导致队列溢出。因此,在实际应用中,需要合理设置队列的容量,以避免出现溢出的情况。

队列的表示方法

我们可以用字符图来表示队列的操作原理。假设我们有一个初始为空的队列:

初始状态:

队头        队尾
--------------
|            |
--------------
  1. 将元素A入队:
队头        队尾
--------------
|     A      |
--------------
  1. 将元素B入队:
队头        队尾
--------------
|     A      |
--------------
|     B      |
--------------
  1. 将元素C入队:
队头        队尾
--------------
|     A      |
--------------
|     B      |
--------------
|     C      |
--------------

出队操作:

  1. 执行出队操作:
     
    队头        队尾
    --------------
    |     B      |
    --------------
    |     C      |
    --------------
    

  2. 再次执行出队操作:
队头        队尾
--------------
|     C      |
--------------
  1. 执行出队操作后,队列为空:
队头        队尾
--------------
|            |
--------------

队列的应用

假设我们有一个打印队列,多个打印任务需要依次打印。新的打印任务总是加入到队列的末尾,而正在打印的任务从队列头部移除。这里用字符图来表示打印队列的过程:

初始状态:

队头              队尾
---------------------
|                   |
---------------------

打印任务A、B、C分别加入队列:

队头              队尾
---------------------
|     A     B     C |
---------------------

开始打印任务A:

队头              队尾
---------------------
|     B     C       |
---------------------

打印任务B完成,开始打印任务C:

队头              队尾
---------------------
|     C             |
---------------------

打印任务C完成,队列为空:

队头              队尾
---------------------
|                   |
---------------------

队列的代码实现

#include <iostream>
#include <queue>using namespace std;int main() {// 创建一个队列queue<int> q;// 入队操作q.push(1);q.push(2);q.push(3);// 出队操作q.pop();// 获取队头元素int front_element = q.front();cout << "队头元素:" << front_element << endl;// 获取队列大小int queue_size = q.size();cout << "队列大小:" << queue_size << endl;return 0;
}

以上代码使用了C++标准库中的queue容器来实现队列操作。通过入队(push)、出队(pop)、获取队头元素(front)和获取队列大小(size),我们可以方便地操作队列中的元素。

总结

队列作为一种基本的数据结构,在计算机科学中有着重要的应用。通过先进先出的原则,队列能够很好地模拟现实生活中的排队场景,并在各种算法和应用中发挥着重要作用。无论是任务调度、打印管理还是广度优先搜索,队列都是不可或缺的工具之一。

相关文章:

队列(Queue):先进先出的数据结构队列

栈与队列https://blog.csdn.net/qq_45467165/article/details/127958960?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127958960%22%2C%22source%22%3A%22qq_45467165%22%7D 队列&#xff08;Queue&#xff09;是一种常见的线…...

CentOS ens160 显示disconnected

使用nmcli device查看网卡状态&#xff0c;显示如图&#xff1a; 检查宿主机系统VMware DHCP Sevice和VMware NAT Sevice服务是否正常运行。 右键点击我的电脑管理按钮&#xff0c;打开计算机管理点击服务...

使用 ChatGPT 创建 PowerPoint 演示文稿

让 ChatGPT 成为您的助手来帮助您编写电子邮件很简单,因为众所周知,它非常能够生成文本。很明显,ChatGPT 无法帮助您做饭。但您可能想知道它是否可以生成文本以外的其他内容。在上一篇文章中,您了解到 ChatGPT 只能通过中间语言为您生成图形。在这篇文章中,您将了解使用中…...

matlab将数组值划分为两类

例如&#xff1a;大于0的处理为1&#xff0c;小于0的处理为-1. 当然&#xff0c;可以选择循环结构和选择结构&#xff0c;但是效率会很低。 这里直接使用逻辑语句完成。 % 不使用循环语句&#xff0c;将数组内值划分为两类 clc; clearvars; a[-0.1422 , -0.0433 , 0.1131 …...

【点击新增一个下拉框 与前一个内容一样 但不能选同一个值】

点击新增一个下拉框 与前一个内容一样 但不能选同一个值 主要是看下拉选择el-option的disabled,注意不要混淆 <el-form label-width"120px" :model"form" ref"form" style"color: #fff"><template v-for"(trapolicy, i…...

【Gitee提交pr】

Gitee提交pr 什么是pr怎样提交一个pr嘞&#xff1f; 什么是pr pr:指的是将自己的修改从自己的账号仓库dev下提交到官方账号仓库master下&#xff1b; 通俗来讲就是Gitee线上有属于自己的分支&#xff0c;然后本地在自己地分支修改完代码之后&#xff0c;提交到自己的线上分支&a…...

一款打工人必备的电脑端自律软件!!冲鸭打工人!!

你&#xff01;有没有渴望进步&#xff01;&#xff01; 你&#xff01;有没有渴望变强&#xff01;&#xff01;&#xff01; 成为大佬&#xff01;&#xff01;&#xff01;超越巨佬&#xff01;&#xff01;&#xff01; 这就是一款为这样的你量身定做的程序&#xff1a;输入…...

【Vue框架】 router和route是什么关系

前言 之前没太注意&#xff0c;写着写着突然发现它们貌似不太一样&#xff0c;记录以下&#xff0c;回顾的看总结就好。 1、总结✨ route&#xff1a;当前激活路由的对象&#xff0c;用于访问和操作当前路由的信息 router&#xff1a;管理多个route的对象&#xff0c;整个应…...

整理mongodb文档:聚合管道

个人博客 整理mongodb文档:聚合管道 个人博客&#xff0c;求关注&#xff0c;电脑版看体验更加&#xff0c;如果不够清晰&#xff0c;请指出来&#xff0c;谢谢 文章概叙 文章主要通过几个常用的聚合表达式来介绍聚合管道的使用&#xff0c;以及从索引的角度来介绍聚合管道…...

Delphi 11.3 FMX 多设备平台中使用 TGrid 实现类似 TDBGrid 的效果

Delphi Firemonkey 中 TDBGrid 这个控件已经没有了。如何实现类似这个效果呢。其实可以用TGrid 来实现。以下用 11.3 来讲解。 查询里面用到的 connection 和 query 等控件那些一般的数据库用法&#xff0c;就不做过多描述了。请参考其他资料。 方法一.通过界面配置来实现 在…...

Qt-事件循环与QtConcurrent、QThread结合使用时注意的点

QEventLoop和QtConcurrent可以结合使用达到主线程ui不阻塞同步执行的效果&#xff0c;但是要小心避坑&#xff0c;查看如下代码&#xff1a; QEventLoop loop; QtConcurrent::run([&]() {doSomething();loop.quit(); }); loop.exec();上述写法存在两个问题&#xff1a; Q…...

基于MongoDB的空间数据存储与查询

一、概念说明 1.1 空间地理数据 MongoDB 中使用 GeoJSON对象 或 坐标对 描述空间地理数据。MongoDB使用 WGS84 参考系进行地理空间数据查询。 1、MongoDB支持空间数据的存储&#xff0c;数据类型需要限制为GeoJSON; 2、MongoDB可以为GeoJSON类型数据建立索引&#xff0c;提升空…...

jquery中pdf的上传、下载及excel导出

jquery中pdf的上传、下载及excel导出 1.PDF上传 pdfUpload2. pdf下载和excel导出用的一种方法&#xff0c;并且需要引入utils.js2.1PDF下载 pdfDownload2.2导出Excel excelExport 1.PDF上传 pdfUpload //PDF上传 pdfUpload window.pdfUploadfunction (obj){layer.open({type:…...

【MyBatis】:PageHelper分页插件与特殊字符处理

目录 一、PageHelper介绍 二、PageHelper使用 1. 导入pom依赖 2. Mybatis.cfg.xml 配置拦截器 3. 配置 Mapper.xml 4. 编写测试 三、特殊字符处理 1. 使用转义字符 2. 使用CDATA 区段 一、PageHelper介绍 PageHelper 是 Mybatis 的一个插件&#xff0c;这里就不扯了&a…...

C语言练习1(巩固提升)

C语言练习1 选择题 前言 “人生在勤&#xff0c;勤则不匮。”幸福不会从天降&#xff0c;美好生活靠劳动创造。全面建成小康社会的奋斗目标&#xff0c;为广大劳动群众指明了光明的未来&#xff1b;全面建成小康社会的历史任务&#xff0c;为广大劳动群众赋予了光荣的使命&…...

eCharts热力图Y轴左上角少一块

问题&#xff1a; 如图 在图例的左上角 Y轴会少一块 官方demo https://echarts.apache.org/examples/zh/editor.html?cheatmap-cartesian 事实上 把官方demo的左上角坐标 [ 6, 0, 1 ] 修改为 [ 6, 0, 0 ] 后 依旧会出现该问题 查遍文档 并无解释 也没有任何配置项可解决…...

RabbitMQ介绍

RabbitMQ的概念 RabbitMQ 是一个消息中间件&#xff1a;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按照这种逻辑 RabbitMQ 是 一个快递…...

玩转软件|钉钉个人版内测启动:AI探索未来的工作方式

目录 前言 正文 AI为核心&#xff0c;个人效率为王&#xff01; 指令中心&#xff0c;解锁AI技巧&#xff01; 灵感Store&#xff0c;探索更多可能&#xff01; 未来的AI&#xff0c;即将问世&#xff01; 个人内测体验 前言 重磅消息&#xff1a;钉钉个人版在8月16日正…...

【Linux】一张图了解系统文件

首先先认识磁盘结构 系统文件分布图 文件查找 文件删除 文件的增删改查都是围绕inode来完成的&#xff0c;所以当我们要进行文件删除的时候&#xff0c;只需要通过inode来获取到它对应的block bitmap和inode bitmap数据块容器和保存文件属性的位置置为 0即可 &#xff0c;如果想…...

自动化测试平台seldom-platform部署及使用

介绍 seldom-platform是一个基于seldom测试框架的测试平台 项目地址&#xff1a;https://github.com/SeldomQA 文档&#xff1a;seldom 语雀 首先&#xff0c;专门为seldom测试框架提供平台化支持。其次&#xff0c;只负责自动化测试项目的解析、执行用例&#xff0c;当然…...

2023年8月第3周大模型荟萃

2023年8月第3周大模型荟萃 2023.8.22版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、LLM-Adapters&#xff1a;可将多种适配器集成到大语言模型 来自新加坡科技设计大学和新加坡管理大学的研究人员发布了一篇题为《LLM-Adapters: An …...

win11 设置小任务栏

设置后效果 以下两种工具均可 1、StartAllBack 2、Start11...

在 React 中获取数据的6种方法

一、前言 数据获取是任何 react 应用程序的核心方面。对于 React 开发人员来说&#xff0c;了解不同的数据获取方法以及哪些用例最适合他们很重要。 但首先&#xff0c;让我们了解 JavaScript Promises。 简而言之&#xff0c;promise 是一个 JavaScript 对象&#xff0c;它将…...

Docker基础入门:常规软件安装与镜像加载原理

Docker基础入门&#xff1a;常规软件安装与镜像加载原理 一、Docker常规软件安装1.1、部署nginx1.2、部署tomcat1.3、部署elasticsearch1.4、如何部署kibana-->连接elasticsearch1.5、部署可视化工具 二、 镜像加载原理2.1、镜像是什么2.2、Docker镜像加速原理2.3、分层理解…...

redis初识

目录 前言&#xff1a; 核心全局命令 key过期实现方式 定时器实现方式 基于优先级队列/堆 redis特性 redis优点 redis单线程模型 redis单线程为什么效率这么高&#xff1f; 核心五种数据类型内部编码方式 前言&#xff1a; redis作为当前主流的内存数据库&#xff08…...

死锁的典型情况、产生的必要条件和解决方案

前言 死锁&#xff1a;多个线程同时被阻塞&#xff0c;他们中的一个或全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 目录 前言 一、死锁的三种典型情况 &#xff08;一&#xff09;一个线程一把锁 &#xff08;二&#xff09;…...

日志搞不定?手把手教你如何使用Log4j2

系列文章目录 从零开始&#xff0c;手把手教你搭建Spring Boot后台工程并说明 Spring框架与SpringBoot的关联与区别 SpringBean生成流程详解 —— 由浅入深(附超精细流程图) Spring监听器用法与原理详解 Spring事务畅谈 —— 由浅入深彻底弄懂 Transactional注解 面试热点详解…...

基于Googlenet深度学习网络的交通工具种类识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ....................................................................................% 获…...

R语言04-R语言中的列表

概念 在R语言中&#xff0c;列表&#xff08;List&#xff09;是一种复杂的数据结构&#xff0c;用于存储不同类型的元素&#xff0c;包括向量、矩阵、数据框、函数等。列表是一种非常灵活的数据结构&#xff0c;可以将不同类型的数据组合在一起&#xff0c;类似于Python中的字…...

[Linux]进程概念

[Linux]进程概念 文章目录 [Linux]进程概念进程的定义进程和程序的关系Linux下查看进程Linux下通过系统调用获取进程标示符Linux下通过系统调用创建进程-fork函数使用 进程的定义 进程是程序的一个执行实例&#xff0c;是担当分配系统资源&#xff08;CPU时间&#xff0c;内存…...

金融企业网站制作/2022年时事政治热点汇总

以下是一个简单的FIR滤波器在FPGA上实现的Verilog代码: module fir_filter(input clk,input reset,input signed [15:0] data_in,output signed [15:0] data_out );parameter N = 4; // 滤波器阶数parameter COEFF_WIDTH = 16; // 系数位宽parameter DATA_WIDTH =...

好康的网站代码/广告大全

在这个数据横流的信息时代&#xff0c;一系列企业用户数据泄密事件&#xff0c;给互联网信息安全敲响了警钟。 2011年至2014年上半年&#xff0c;乌云漏洞平台&#xff08;乌云网&#xff09;连续披露了多家互联网公司的安全漏洞&#xff0c;引发了社会各界的强烈关注&#xf…...

有了网站怎么写文章/google浏览器入口

时间的恋人 ——《时间的朋友》观后感 对生活狂热的爱好和对世界狂热的追求&#xff0c;如此生活态度和人生观念&#xff0c;是我&#xff0c;我不是“时间的朋友”&#xff0c;我是“时间的恋人”。 看完一个视频&#xff0c;回过头来想想给自己留下了什么&#xff0c;我习惯断…...

沈阳德泰诺网站制作/广告制作

学习了四边形不等式&#xff0c;这类题的的方程通常是这样的&#xff1a; f[i,j]opt( f[i,k-1]f[k,j] )cost[i,j] 【我一般理解为区间动态规划】 应用条件是&#xff1a; 第一&#xff0c;其中的cost(I,j)是存在单调性的&#xff0c;即当区间[i,j]包含区间[i’,j’]时有cost(i,…...

如何上传网站/临沂森拓网络科技有限公司

修改/etc/grub.conf文件 将该文件中以kernel开头的一行行尾添加vgaask 或者以如下数值代替ask ################################################################## color 640x480 800x600 1024x768 1280x1024 256 769 771 …...

做企业宣传网站/泉州百度关键词排名

1 Action 在OSC_POSE的控制模式下&#xff0c;action格式为[x,y,z,r,p,y,w][x,y,z,r,p,y,w][x,y,z,r,p,y,w]&#xff0c;其中xyzxyzxyz是机械手末端中心分别沿世界坐标系的xyz轴平移的距离&#xff08;单位m&#xff09;&#xff0c;rpyrpyrpy是机械手末端中心分别沿世界坐标系…...