算法模板之队列图文详解

在这里插入图片描述
🌈个人主页:聆风吟
🔥系列专栏:算法模板、数据结构
🔖少年有梦不应止于心动,更要付诸行动。


文章目录

  • 📋前言
  • 一. ⛳️模拟队列
    • 1.1 🔔用数组模拟实现队列
      • 1.1.1 👻队列的定义
      • 1.1.2 👻初始化队列
      • 1.1.3 👻向队尾插入一个数 x(入队列)
      • 1.1.4 👻从队头弹出一个数(出队列)
      • 1.1.5 👻判断队列是否为空
      • 1.1.6 👻查询队头元素
    • 1.2 🌟模板提取(重点)🌟
      • 1.2.1 👻无详细注释版
      • 1.2.2 👻有详细注释版
  • 二. ⛳️题目练习
    • 2.1 题目
    • 2.2 输入样例
    • 2.3 输出样例
    • 2.4 c++代码
  • 📝结语

📋前言

    💬 hello! 各位铁子们大家好哇,我们上期已经带大家学习了栈的模板,相信爱学习的你都熟练掌握了,如果你还需要查漏不缺可以通过下面专栏自行跳转学习,今天作者给大家带来了队列的算法模板讲解,让我们一起加油进步。
    📚 系列专栏:本期文章收录在《算法模板》,大家有兴趣可以浏览和关注,后面将会有更多精彩内容!
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝



一. ⛳️模拟队列

1.1 🔔用数组模拟实现队列

1.1.1 👻队列的定义

    队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。如下图所示:
在这里插入图片描述
    由于我们使用数组去模拟队列,因此可以将队列看成是一个特殊的数组:这个数组,最前面叫队头,最后面叫队尾。只允许在最后面添加元素,并并且只允许在最前面删除元素。如下图所示:
在这里插入图片描述


1.1.2 👻初始化队列

    初始状态:我们可以将数组的队头指针指向数组下表为0的位置,队尾指向-1位置,因为满足 tt < hh,所以初始状态队列为空。
在这里插入图片描述代码展示(建议结合图示看注释):

//初始化
//定义一个数组q用于存储队列中的元素
int q[N];
int hh = 0;//hh表示队头
int tt = -1;//tt表示队尾

1.1.3 👻向队尾插入一个数 x(入队列)

    根据以上可知:如果我们想向队尾插入一个元素x(即进行入队列操作),我们只需要将队尾指针tt向后移动一位,并将待插入元素 x 存入队尾指针tt指向的位置。
在这里插入图片描述代码展示(建议结合图示看注释):

//向队尾插入一个数
//入队:队尾先往后移动一格,再放入要插入的数据 x
q[++tt] = x;

1.1.4 👻从队头弹出一个数(出队列)

    根据以上可知:如果我们要将一个队列从队头弹出一个数(即进行出队列操作),我们只需要将队头指针向后移动一位即可将队头元素移除。如下图所示:
在这里插入图片描述代码展示(建议结合图示看注释):

//从队头弹出一个数
//出队:队头往后移动一格
hh++;

1.1.5 👻判断队列是否为空

    根据以上可知:判断一个队列是否为空,我们只需要判断队头指针hh和队尾指针tt大小:

  • 如果tt >= hh,说明队列不为空;
  • 如果tt < hh,说明队列为空。

在这里插入图片描述代码展示(建议结合图示看注释):

//判断队列是否为空
//[hh, tt]表示队列区间,当tt >= hh时,区间不为空
if(tt >= hh)
{//输出队列不为空
}
else
{//输出队列为空
}

1.1.6 👻查询队头元素

    根据以上可知:查询队头元素只需要将头指针指向的数据输出即可,如下图所示:
在这里插入图片描述代码展示(建议结合图示看注释):

//查询队头元素
//hh指向队头,q[hh]代表队头元素
q[hh];

1.2 🌟模板提取(重点)🌟

1.2.1 👻无详细注释版

c++代码模板:

//初始化
int q[N];
int hh = 0;//hh表示队头
int tt = -1;//tt表示队尾//向队尾插入一个数
q[++tt] = x;//从队头弹出一个数
hh++;//判断队列是否为空
if(tt >= hh)
{//输出队列不为空
}
else
{//输出队列为空
}//查询队头元素
q[hh];

1.2.2 👻有详细注释版

c++代码模板:

//初始化
int q[N];//定义一个数组q用于存储队列中的元素
int hh = 0;//hh表示队头
int tt = -1;//tt表示队尾//向队尾插入一个数
//入队:队尾先往后移动一格,再放入要插入的数据 x
q[++tt] = x;//从队头弹出一个数
//出队:队头往后移动一格
hh++;//判断队列是否为空
//[hh, tt]表示队列区间,当tt >= hh时,区间不为空
if(tt >= hh)
{//输出队列不为空
}
else
{//输出队列为空
}//查询队头元素
//hh指向队头,q[hh]代表队头元素
q[hh];


二. ⛳️题目练习

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

2.1 题目

在这里插入图片描述

2.2 输入样例

10
push 6
empty
query
pop
empty
push 3
push 4
pop
query
push 6

2.3 输出样例

NO
6
YES
4

2.4 c++代码

#include <iostream>using namespace std;const int N = 100010;
int q[N];
int hh = 0;//队头
int tt = -1;//队尾int main()
{int m = 0;cin >> m;while(m--){int x = 0;string s;cin >> s;if(s == "push"){//向队尾插入一个数 xcin >> x;q[++tt] = x;}else if(s == "pop"){//从队头弹出一个数hh++;}else if(s == "empty"){//判断队列是否为空cout << (tt < hh ? "YES":"NO") << endl;}else{//查询队头元素cout << q[hh] << endl;}}return 0;
}


📝结语

     本文主要讲解队列的定义、使用数组模拟实现队列的相关操作:入队列、出队列、判断队列是否为空、查询队头元素,通过队列相关操作的讲解最终我们提取出了队列的算法模板,并通过一个题目的练习结束了今天的课程。希望大家课下能够多敲多练,孰能生巧。

     今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,聆风吟的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的最大动力!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1859_续流二极管是什么以及其作用

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1859_续流二极管是什么以及其…

python 解决手机拍的书籍图片发灰的问题

老师给发的作业经常是手机拍的&#xff0c;而不是扫描&#xff0c;背景发灰&#xff0c;如果二次打印就没有看了&#xff0c;象这样&#xff1a; 如果使用photoshop 处理&#xff0c;有些地方还是扣不干净&#xff0c;不如python 做的好&#xff0c;处理后如下&#xff1a; 具体…

css 设备背景图片 宽高总是不能平铺

宽高总是宽大了 高就挤出去了&#xff1b;高设置了 宽度就变小了&#xff1b;疯掉的节奏。。。。。。 .center-bottom{background: url(/img/newpic/leftbg.png);background-repeat: no-repeat;width: 98%;height: 60%;background-position: center center;background-size: 1…

关于网络犯罪份子租用WikiLoader通过银行木马攻击意大利组织的动态情报

一、基本内容 近期Proofpoint研究人员发现了一种新的恶意软件&#xff0c;被称为WikiLoader。这个恶意软件在2022年12月首次被发现&#xff0c;并且由攻击者组织TA544传播&#xff0c;他们通常使用Ursnif恶意软件来攻击意大利组织。Proofpoint观察到了多个与此相关的活动&…

设计模式(4)--类行为(3)--解释器

1. 意图 给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语 言中的句子。 2. 四种角色 抽象表达式(AbstractExpression)、终结表达式(TerminalExpression)、非终结表达式(NonterminalExpression)、上下文…

LTE之帧结构

一、基本时间单位 在LTE里&#xff0c;时间的基本单位都是采样周期Ts&#xff0c;值固定等于&#xff1a; Ts 1 / (15000 * 2048) 32.55ns 其中&#xff0c;15000表示子载波的间隔是15kHz&#xff0c;2048表示采样点个数。除了15kHz的子载波间隔之外&#xff0c;3GPP还定义…

【高数定积分求解旋转体体积】 —— (上)高等数学|定积分|柱壳法|学习技巧

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 Shell method Setting up the Integral 例题 Example 1: Example 2: Example 3: Computing…

安工程校园导游系统课程设计报告

第一章 概述 1.1 问题描述 根据题目内容,需要用无向网表示所在学校的景点平面图,即校内每个景点 为无向网中的各个结点,景点的编号、名称、简介等信息存储在结点中,图中的 边表示景点间的道路,存放景点之间的路径长度等信息。需要回答有关景点介绍、 游览路径等问题。具…

【LearnOpenGL基础入门——5】着色器

目录 一.简介 二.GLSL 三.数据类型 四.输入与输出 五.Uniform 六.更多属性 一.简介 着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说&#xff0c;着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立…

深度学习 | 基础卷积神经网络

卷积神经网络是人脸识别、自动驾驶汽车等大多数计算机视觉应用的支柱。可以认为是一种特殊的神经网络架构&#xff0c;其中基本的矩阵乘法运算被卷积运算取代&#xff0c;专门处理具有网格状拓扑结构的数据。 1、全连接层的问题 1.1、全连接层的问题 “全连接层”的特点是每个…

关于巴西网络犯罪分子使用LOLBaS和CMD脚本窃取银行账户的动态情报

一、基本内容 最近&#xff0c;一名未知身份的网络犯罪威胁行为者以使用西班牙语和葡萄牙语的用户为目标&#xff0c;破坏墨西哥、秘鲁和葡萄牙等地的网上银行账户。该攻击链主要利用社会工程学技术&#xff0c;利用葡萄牙和西班牙用户的电子邮件&#xff0c;发送带有欺骗性的…

idea structure视图介绍

作用 idea的Structure视图可以辅助查看代码结构 如何呼出Structure视图&#xff1f; Alt 7 Ctrl F12 侧边栏点Structure 我的常用配置 1、选Show Toolbar&#xff0c;便于使用功能按钮 2、使用Float视图&#xff0c;悬浮于窗口表面&#xff0c;可以使用 ShiftEsc来退出…