当前位置: 首页 > 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),我们可以方便地操作队列中的元素。

总结

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

http://www.lryc.cn/news/137972.html

相关文章:

  • CentOS ens160 显示disconnected
  • 使用 ChatGPT 创建 PowerPoint 演示文稿
  • matlab将数组值划分为两类
  • 【点击新增一个下拉框 与前一个内容一样 但不能选同一个值】
  • 【Gitee提交pr】
  • 一款打工人必备的电脑端自律软件!!冲鸭打工人!!
  • 【Vue框架】 router和route是什么关系
  • 整理mongodb文档:聚合管道
  • Delphi 11.3 FMX 多设备平台中使用 TGrid 实现类似 TDBGrid 的效果
  • Qt-事件循环与QtConcurrent、QThread结合使用时注意的点
  • 基于MongoDB的空间数据存储与查询
  • jquery中pdf的上传、下载及excel导出
  • 【MyBatis】:PageHelper分页插件与特殊字符处理
  • C语言练习1(巩固提升)
  • eCharts热力图Y轴左上角少一块
  • RabbitMQ介绍
  • 玩转软件|钉钉个人版内测启动:AI探索未来的工作方式
  • 【Linux】一张图了解系统文件
  • 自动化测试平台seldom-platform部署及使用
  • 2023年8月第3周大模型荟萃
  • win11 设置小任务栏
  • 在 React 中获取数据的6种方法
  • Docker基础入门:常规软件安装与镜像加载原理
  • redis初识
  • 死锁的典型情况、产生的必要条件和解决方案
  • 日志搞不定?手把手教你如何使用Log4j2
  • 基于Googlenet深度学习网络的交通工具种类识别matlab仿真
  • R语言04-R语言中的列表
  • [Linux]进程概念
  • GEE/PIE遥感大数据处理与应用