算法模板之队列解密 | 图文详解

news2025/8/13 3:48:47

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


文章目录

  • 📋前言
  • 一. ⛳️模拟队列
    • 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 👻有详细注释版
  • 二. ⛳️题目练习
  • 📝全文总结

📋前言

    💬 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链接,可以转至此处自行练习 ⌋

题目:
在这里插入图片描述

输入样例:

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

输出样例:

NO
6
YES
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")
        {
            //向队尾插入一个数 x
            cin >> 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.coloradmin.cn/o/1161625.html

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

相关文章

解决远程桌面 这可能是由于CredSSP加密数据库修正问题

运行环境 : Windows Server 2012 R2 Standard 解决方式 策略组 gpedit.msc&#xff0c;注册表 regedit 等方式都尝试无效时&#xff0c;可尝试把下面这个勾勾去掉。

【小黑嵌入式系统第七课】PSoC® 5LP 开发套件(CY8CKIT-050B )——PSoC® 5LP主芯片、I/O系统、GPIO控制LED流水灯的实现

上一课&#xff1a; 【小黑嵌入式系统第六课】嵌入式系统软件设计基础——C语言简述、程序涉及规范、多任务程序设计、状态机建模(FSM)、模块化设计、事件触发、时间触发 文章目录 一、PSoC 5LP主芯片二、PSoC 5LP I/O系统(1) I/O系统特性(2) I/O系统怎样运作&#xff1f;1、I/…

【PC】神秘市场2023

神秘市场2023 我们有一个令人振奋的消息要告诉大家&#xff0c;神秘市场要开张了&#xff01; 据可靠情报&#xff0c;这次全新的神秘市场将返场稀有度高的道具。全新黑货箱也将在藏匿处出现&#xff0c;工坊也会推出全新工匠通行证。不仅如此&#xff0c;特殊制作中也能看到…

《YOLOv8-Pose关键点检测》专栏介绍 CSDN独家改进创新实战 专栏目录

YOLOv8-Pose关键点检测专栏介绍&#xff1a;http://t.csdnimg.cn/gRW1b ✨✨✨手把手教你从数据标记到生成适合Yolov8-pose的yolo数据集&#xff1b; &#x1f680;&#x1f680;&#x1f680;模型性能提升、pose模式部署能力&#xff1b; &#x1f349;&#x1f349;&#…

【Java】医院云HIS信息管理系统源码:实现检验、检查、心理CT、B超等医技报告查看

云HIS采用主流成熟技术&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS 应用&#xff0c;全浏览器访问前后端分离&#xff0c;多服务协同&#xff0c;服务可拆分&#xff0c;功能易扩展&#xff1b;支持多样化灵活配置&#xff0c;提取大量公共参数&#xff0c;无需…

Debian或Ubuntu静态交叉编译arm和aarch64

Debian或Ubuntu静态交叉编译arm和aarch64 介绍术语ARM架构前置条件从源代码编译一个简单的C程序configure和make交叉编译关于静态链接和依赖关系使用 musl libc 实现与 configure 和 make 进行交叉编译 ARM 正在获得越来越多的关注&#xff0c;并且越来越受欢迎。直接在这些基于…

知行之桥EDI系统如何连接人大金仓数据库?

近年来受到国际形势与国内发展规划等因素的影响&#xff0c;“国产替代”口号逐渐深入人心&#xff0c;越来越多的企业开始考虑用国产软件替代国外软件&#xff0c;尤其是在当前的大数据时代&#xff0c;计算能力主要依赖于数据中心。 然而&#xff0c;20世纪70年代以来&#…

基于springboot实现原创歌曲分享平台系统项目【项目源码+论文说明】

基于springboot实现原创歌曲分享平台系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理平台应运而生…

Python3.8引入海象运算符(Walrus Operator)的一些认识

1、引言 这个运算符为什么跟海象联系在一起呢&#xff1f;因为看起来像是躺着的海象&#xff0c;其中眼睛和牙齿的形象表示就是海象运算符了&#xff0c;如下图&#xff1a; 海象运算符&#xff0c;也叫做海象选择器&#xff0c;在Go语言中很常见&#xff0c;Python3.8也开始引…

智能直流自动清洁离子风机的优势和应用

智能直流自动清洁离子风机是一种高效、智能化的通风设备&#xff0c;具有以下优势&#xff1a; 清洁方便&#xff1a;智能直流自动清洁离子风机配备了自动清洁功能&#xff0c;可以自动清洁离子发生器&#xff0c;减少清洁维护的时间和成本。 高效节能&#xff1a;智能直流自动…

2003 - Can‘t connect to MysQL server on ‘39.108.169.0‘ (10060 “Unknown error“)

问题描述 某天和往常一样启动java项目&#xff0c;发现数据库出问题了&#xff0c;然后打开navicat&#xff0c;发现数据库的链接都连接不上&#xff0c; 一点击就会弹出报错框&#xff1a; 然后就各种上网搜索。 解决方案 上网查了一些解决方案&#xff0c;大部分都是说看…

随想录一刷·数组part1

你好&#xff0c;我是安然无虞。 文章目录 1. 二分查找题型2. 移除元素题型 1. 二分查找题型 二分查找传送门 class Solution { public:int search(vector<int>& nums, int target) {// 在有序数组中查找第一时间想到二分查找int left 0, right nums.size() - 1…

似乎我养的这只猫可能正能犯二

真的会有弱智猫吗&#xff1f;请问&#xff0c;我家小猫天天跑酷发疯 然后不停的撞到头还撞的哐哐响&#xff0c;就刚刚五分钟以内她已经撞了七八次头了&#xff0c;我真觉得她有点不聪明。 我刚准备上卫生间&#xff0c;然后扭头看一下它&#xff0c;它看我回过头来然后就赶紧…

【致远】致远OA取消个人空间显示。

【问题需求】 使用致远系统OA软件过程中&#xff0c;由于公司各个部门有对应的空间布局。 所以想要各个部门人员登陆后&#xff0c;默认对应部门空间。 但是所有人登录后&#xff0c;都会默认为个人空间。 虽然在首页设置–导航设置中&#xff0c;可以将个人空间取消显示&#…

5个最流行的文本生成纹理AI工具

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 拥抱文本生成纹理AI模型改变游戏规则的力量&#xff0c;人工智能驱动的创新彻底改变了游戏开发中的资产创建。 这些出色的工具可将书面描述转换…

数据抽样技术全面概述

抽样是研究和数据收集中不可或缺的方法&#xff0c;能够从更大数据中获得有意义的见解并做出明智的决定的子集。不同的研究领域采用了不同的抽样技术&#xff0c;每种技术都有其独特的优点和局限性。本文将深入探讨了最常见的抽样技术&#xff0c;包括随机抽样、分层抽样、系统…

界面控件DevExtreme v23.1新版亮点 - 数据层、可访问性功能升级

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

【Servlet】 一

本文主要介绍了如何在tomcat部署一个webapp 以及 如何借助maven用servlet编写一个hello world . 一.Tomcat Tomcat是一个Java里广泛使用的http服务器 HTTP服务器有很多实现&#xff0c;其中最知名的是Nginx&#xff1b;而在Java里&#xff0c;最知名的是Tomcat 一个Tomcat服务…

mysql数据库【基础】

本教程适合有一定基础的人&#xff0c;我是用来复习mysql数据&#xff0c;跟着教程走一遍熟悉一下mysql的语句 数据准备 下面的数据库查询语句都是基于此表进行查询的 员工表 创建表&#xff1a; -- 创建表 drop table if exists emp; create table emp (id int …

vue基于ElementUI/Plus自定义的一些组件

vue3-my-ElementPlus 源码请到GitHub下载使用MyTable、MySelect、MyPagination 置顶|Top | 使用案例&#xff1a; 1.0 定义表格数据&#xff08;测试使用&#xff09; data() {return {tableData: [],value:[],valueList: [],}; },// 构造表格测试数据// 1 第一行&#xf…