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

news2024/11/24 5:33:07

栈与队列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),我们可以方便地操作队列中的元素。

总结

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

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

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

相关文章

VS+Qt 自定义Dialog

与QtCreator不同&#xff0c;刚用VS添加Qt Dialog界面有点懵&#xff0c;后整理了下&#xff1a; 1.右击项目&#xff0c;选择“添加-模块”&#xff0c;然后选择“Qt-Qt Widgets Class” 2.选择基类[1]QDialog,更改[2]ui文件名称&#xff0c;修改定义Dialog[3]对应类名&#…

前端工程化之模块化

模块化的背景 前端模块化是一种标准&#xff0c;不是实现理解模块化是理解前端工程化的前提前端模块化是前端项目规模化的必然结果 什么是前端模块化? 前端模块化就是将复杂程序根据规范拆分成若干模块&#xff0c;一个模块包括输入和输出。而且模块的内部实现是私有的&…

c++学习之内存管理

目录 1.c/c内存分布 2.new与delete/malloc与free c内存管理方式&#xff1a; new/delete操作内置类型&#xff1a; new/delete操作自定义类型 operator new与operator delete函数 new和delete的实现原理 内置类型 自定义类型 malloc/free和new/delete的区别 1.c/c内存分…

Linux——初始

linux是一个操作系统&#xff0c;目前主流就是在服务器后端被选作服务器的操作系统来使用&#xff0c;所以我们没有直接接触到。 Linux的历史和概念 先是国家投钱给科研技术人员&#xff0c;科研技术人员将科研成果部分投入生活用品卖给老百姓&#xff0c;老百姓购买产品同时还…

Java课题笔记~ 综合案例

3.综合案例 3.1 功能介绍 以上是我们在综合案例要实现的功能。除了对数据的增删改查功能外&#xff0c;还有一些复杂的功能&#xff0c;如 批量删除、分页查询、条件查询 等功能 批量删除 功能&#xff1a;每条数据前都有复选框&#xff0c;当我选中多条数据并点击 批量删除 按…

YOLOv5算法改进(4)— 添加CA注意力机制

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。注意力机制是近年来深度学习领域内的研究热点&#xff0c;可以帮助模型更好地关注重要的特征&#xff0c;从而提高模型的性能。在许多视觉任务中&#xff0c;输入数据通常由多个通道组成&#xff0c;例如图像中的RGB通道或…

村口的人家排放污水,污水浸染了整个村子,怎么办

从前有一个很不错的村子里&#xff0c;村子里有很多户人家&#xff0c;随着生活水平越来越好&#xff0c;房子也修起来了&#xff0c;柏油马路也宽敞了&#xff0c;大家进出村子&#xff0c;都要走那条马路&#xff0c;要不就出不去。 目录 1. 修厕所 2. 村口的日家 3. 告诉…

商城的TPS与并发用户数是如何换算的?

商城的TPS与并发用户数的换算关系可以通过以下公式计算&#xff1a; TPS 并发用户数 / 平均事务响应时间 其中&#xff0c;平均事务响应时间是指系统处理一个事务所需的平均时间。 下面是商城性能测试的一些用例示例&#xff1a; 用户登录&#xff1a; 目标&#xff1a;测…

4.物联网LWIP之C/S编程,stm32作为服务器,stm32作为客户端,代码的优化

LWIP配置 服务器端实现 客户端实现 错误分析 一。LWIP配置&#xff08;FREERTOS配置&#xff0c;ETH配置&#xff0c;LWIP配置&#xff09; 1.FREERTOS配置 为什么要修改定时源为Tim1&#xff1f;不用systick&#xff1f; 原因&#xff1a;HAL库与FREERTOS都需要使用systi…

【Python原创毕设|课设】基于Python Flask的上海美食信息与可视化宣传网站项目-文末附下载方式以及往届优秀论文,原创项目其他均为抄袭

基于Python Flask的上海美食信息与可视化宣传网站&#xff08;获取方式访问文末官网&#xff09; 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 随着大数据和人工智能技术的迅速发展&#xff0c;我们设…

【JavaEE进阶】MyBatis表查询

文章目录 一. 使用MyBatis完成数据库的操作1. MyBatis程序中sql语句的即时执行和预编译1.1 即时执行&#xff08;${}&#xff09;1.2 预编译&#xff08;#{}&#xff09;1.3 即时执行和预编译的优缺点 2. 单表的增删改等操作2.1 增加操作2.2 修改操作2.3 删除操作2.4 like(模糊…

星际争霸之小霸王之小蜜蜂(六)--让子弹飞

目录 前言 一、添加子弹设置 二、创建子弹 三、创建绘制和移动子弹函数 四、让子弹飞 五、效果 总结 前言 小蜜蜂的基本操作已经完成了&#xff0c;现在开始编写子弹的代码了。 一、添加子弹设置 在我的预想里&#xff0c;我们的小蜜蜂既然是一只猫&#xff0c;那么放出的子弹…

基于小波神经网络的短时交通流量预测Matlab代码

1案例背景 1.1小波理论 小波分析是针对傅里叶变换的不足发展而来的。傅里叶变换是信号处理领域中应用最广泛的一种分析手段,然而它有一个严重不足,就是变换时抛弃了时间信息,通过变换结果无法判断某个信号发生的时间,即傅里叶变换在时域中没有分辨能力。小波是长度有限、平均为…

分布式与微服务相关知识

分布式与微服务 1.zookeeper是什么2.zookeeper保证数据一致性3.zookeeper的快速领导者选举是怎么实现的4.CAP理论5.BASE理论6.分布式id生成方案&#xff08;1&#xff09;UUID&#xff08;2&#xff09;数据库自增序列&#xff08;3&#xff09;Leaf-segment&#xff08;4&…

Linux下的系统编程——vim/gcc编辑(二)

前言&#xff1a; 在Linux操作系统之中有很多使用的工具&#xff0c;我们可以用vim来进行程序的编写&#xff0c;然后用gcc来生成可执行文件&#xff0c;最终运行程序。下面就让我们一起了解一下vim和gcc吧 目录 一、vim编辑 1.vim的三种工作模式 2.基本操作之跳转字符 &a…

实现外网访问本地服务

最近开发需要其他项目组的人访问我本地服务测试,但又不在同一个地方,不能使用内网访问,所以需要外网访问本地服务功能. 条件: 1.需要一台具备公网IP的服务器 我用的服务器是windows,电脑也是Windows系统 2.下载frp 软件,只需要下载一份就可以了,分别放到服务器上和本地目录既…

2011-2021年全国各省绿色创新效率数据(原始数据+测算结果)

2011-2021年全国各省绿色创新效率数据&#xff08;原始数据测算结果) 2011-2021年全国各省绿色创新效率 1、时间&#xff1a;2011-2021年 2、范围&#xff1a;全国31省市 3、来源&#xff1a;各省年鉴、科技年鉴、环境年鉴 4、指标&#xff1a;地区、编号、年份、R&D人…

设计模式大白话——命令模式

命令模式 一、概述二、经典举例三、代码示例&#xff08;Go&#xff09;四、总结 一、概述 ​ 顾名思义&#xff0c;命令模式其实和现实生活中直接下命令的动作类似&#xff0c;怎么理解这个命令是理解命令模式的关键&#xff01;&#xff01;&#xff01;直接说结论是很不负责…

树形结构的快速生成

背景 相信大家都遇到过树形结构&#xff0c;像是文件列表、多级菜单、评论区的设计等等&#xff0c;我们都发现它有很多层级&#xff0c;第一级可以有多个&#xff0c;下边的每一个层级也可以有多个&#xff1b;有的可以设计成无限层级的&#xff0c;有的只能设计成两级。那么…

工程师使用IT服务台软件可以解决哪些问题?

现如今企业数字化建设已初具规模&#xff0c;业务系统基本已告一段落&#xff0c;而下一步关注的重点则从技术转向管理&#xff0c;如何能让这些系统更好运行起来&#xff0c;如何提高管理效率已是重中之重。在此向您推荐一款高效的IT服务管理工具——ServiceDesk Plus&#xf…