(三十三)队列(queue)

news2024/12/23 20:32:29

文章目录

  • 1. 队列(queue)
    • 1.1 定义
    • 1.2 函数
    • 1.3 习题
      • 1.3.1 例题(周末舞会)
  • 2. 双向队列(deque)
    • 2.1 定义
    • 2.2 函数
    • 2.3 题目
      • 2.3.1 例题(打BOSS)

1. 队列(queue)

队列也是一种特殊的数据类型,它遵守了先进先出(FIFO, First In First Out)原则

1.1 定义

形象点儿说,队列相当于学校的排队的食堂,先来排队的先得到饭,然后先走;后来排队的最后得到饭,最后走。

STL 专门提供了关于栈和队列的容器,还拓展了一个双向队列(deque)

导入栈(stack):#include <stack>
导入队列(queue):#include <queue>
导入双向队列(deque):#include <deque>
三个库均可使用 #include <bits/stdc++.h> 导入

1.2 函数

想要构造一个队列,可以使用queue<类型> 队列名称 这种方式构造,一般定义的名称:QTqQueue

  1. 名称.push(x):让x入队,也就是x排到队列后方
  2. 名称.pop():让队头出队,后面的代替队头
  3. 名称.front():返回队头数据
  4. 名称.size():返回队列长度
  5. 名称.empty():队列是否为空,空返回1,否则返回0
  6. 名称.clear():清空

遍历队列一般都是程序末尾的事

#include <iostream>
#include <queue>
using namespace std; 

int main () {
	queue<int> T; 
	...
	while(T.size()) {
		cout << T.front() << ' '; 
		T.pop(); 
	}
	return 0; 
}

1.3 习题

它和栈还有一种特殊的出法:DFS 与 BFS
这个后面会有关于它的文章

1.3.1 例题(周末舞会)

题目链接
题目描述
假设在周末舞会上, x x x 个男士和 y y y 个女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。舞曲总共播放 n n n 次。现要求写一个程序,模拟上述舞伴配对问题。

输入
第一行输入两个数 x x x y y y,表示两队的人数;
第二行输入一个数 n n n,表示舞曲的数目。

输出
输出 n n n 排,每排两个数,表示男士编号和女士编号

样例输入

4 6
7

样例输出

1 1
2 2
3 3
4 4
1 5
2 6
3 1

题解
仔细观察输出,你会发现规律:左边以 1 , 2 , . . . , x , 1 , 2 , . . . , x , . . . 1, 2, ..., x, 1, 2, ..., x, ... 1,2,...,x,1,2,...,x,... 的顺序输出,右边以 1 , 2 , y , . . . , 1 , 2 , . . . , y , . . . 1, 2, y, ..., 1, 2, ..., y, ... 1,2,y,...,1,2,...,y,... 的顺序输出

#include <iostream>
#include <queue>
using namespace std; 
int main() {
    int x, y, n; 
    cin >> x >> y >> n; 
    queue<int> M, F; //M:男士    F:女士
    for(int i=1; i<=x; i++) //初始化男士编号
        M.push(i); 
    for(int i=1; i<=y; i++) //初始化女士编号
        F.push(i); 
    for(int i=1; i<=n; i++) {
        M.push(M.front()); //跳完后男士排在队伍后面
        F.push(F.front()); //跳完后女士排在队伍后面
        cout << M.front() << ' ' << F.front() << endl; //输出
        M.pop(); 
        F.pop(); 
    }
    return 0; //结束程序
}

2. 双向队列(deque)

2.1 定义

这是 STL 独有的专属容器,它也有队头和队尾,但插入和删除可以同时进行。形象一点就是医院的“军人优先”。还是一个队列,普通人往后排,军人们有可以排在前面的特权。因此,队头可以插入删除,队尾也可以。

2.2 函数

使用deque<类型> 名称构造一个双向队列,一般名称TDeque

  1. 名称.push_front(x):向队头插入元素x
  2. 名称.push_back(x):向队尾插入元素x
  3. 名称.pop_front():队头出队
  4. 名称.pop_back():队尾出队
  5. 名称.front():返回队头元素
  6. 名称.back():返回队尾元素
  7. 名称.size():返回队列大小
  8. 名称.empty():队列是否为空,是返回1,否则返回0
  9. 名称.clear():清空

2.3 题目

双向队列只是stackqueue的整合,所以关于它的题目很少

2.3.1 例题(打BOSS)

这个复制不了,请点开 题目链接 查看

题解

#include <bits/stdc++.h>
using namespace std; 

int main () {
    int m, s, hp; 
    cin >> m >> s >> hp; 
    deque<int> T; 
    for(int i=1; i<=m; i++) {
        string o; 
        cin >> o; 
        if(o=="add") {
            int n; 
            cin >> n; 
            if(T.size()<s) {
                T.push_back(n); 
            }
        } else {
            if(!T.empty()) {
                if(T.front()>=T.back()) {
                    hp -= T.front(); 
                    T.pop_front(); 
                } else {
                    hp -= T.back(); 
                    T.pop_back(); 
                }
                if(hp<=0) {
                    cout << i; 
                    return 0; 
                }
            }
        }
    }
    cout << "-1"; 
    return 0; 
}

预览

  • 二十六:vector容器
  • 二十七:递推
  • 二十八:set容器
  • 二十九:map容器
  • 三十:二分查找
  • 三十一:前缀和与差分
  • 三十二:栈(stack)
  • 三十三:队列(queue)
  • 三十四:神奇的计算机
  • 三十五:链表
  • 三十六:树与遍历
  • 三十七:图与DFS、BFS
  • 三十八:array容器
  • 三十九:priority_queue容器

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

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

相关文章

常用数据类型

1.数值类型 分为整型和浮点型 double(3,1)&#xff1b;长度是3&#xff0c;小数点后是1&#xff0c;比如99.5&#xff0c;10.0&#xff0c;20.8 这里的float和double与java中的类似&#xff0c;都是IEEE 754标准的浮点数&#xff0c;精度会丢失&#xff0c;存在一定误差&#…

Vue3 -- 集成sass【项目集成5】

集成sass&#xff1a; 看过博主的 配置styleLint工具应该已经安装过 sass sass-loader 了&#xff0c;所以我们只需要加上我们的 lang"scss"即可。 <style scoped lang"scss"></style>给项目添加全局样式文件&#xff1a; 在src文件夹下创建…

【云原生系列--Longhorn的部署】

Longhorn部署手册 1.部署longhorn longhorn架构图&#xff1a; 1.1部署环境要求 kubernetes版本要大于v1.21 每个节点都必须装open-iscsi &#xff0c;Longhorn依赖于 iscsiadm主机为 Kubernetes 提供持久卷。 apt-get install -y open-iscsiRWX 支持要求每个节点都安装 N…

Springboot集成ElasticSearch实现minio文件内容全文检索

一、docker安装Elasticsearch &#xff08;1&#xff09;springboot和Elasticsearch的版本对应关系如下&#xff0c;请看版本对应&#xff1a; 注意安装对应版本&#xff0c;否则可能会出现一些未知的错误。 &#xff08;2&#xff09;拉取镜像 docker pull elasticsearch:7…

Diff 算法的误判

起源&#xff1a; 设想一下&#xff0c;假如你桌面上的文件都没有文件名&#xff0c;取而代之的是&#xff0c;你使用通过文件的位置顺序即index来区分它们———第一个文件&#xff0c;第二个文件&#xff0c;以此类推。也许这种方式可行&#xff0c;可是一旦你删除了其中的一…

D69【 python 接口自动化学习】- python 基础之数据库

day69 Python 执行 SQL 语句 学习日期&#xff1a;20241115 学习目标&#xff1a; MySQL 数据库&#xfe63;- Python连接redis 学习笔记&#xff1a; redis数据库的用途 使用Python访问redis数据库 使用Python对redis数据库进行读写操作 总结 1. redis是一款高性能的键…

飞书文档只读限制复制

飞书文档只读限制复制 场景描述解决方式插件安装测试 场景描述 当使用飞书时&#xff0c;可能会存在无对方文档编辑/管理权限&#xff0c;对方只给自己开放只读权限的时候&#xff0c;此时如果文档较重要&#xff0c;需要本地保存一份&#xff0c;但是又无法复制文档或直接屏蔽…

[每周一更]-(第123期):模拟面试|消息队列面试思路解析

文章目录 22|消息队列:消息队列可以用来解决什么问题?1. 你用过消息队列吗?主要用来解决什么问题?异步、削峰和解耦你能各举一个例子吗?2. 你用的是哪个消息队列?为什么使用它而不用别的消息队列?3. 为什么你一定要用消息队列?不用行不行?不用有什么缺点?4. 在对接多…

npm list @types/node 命令用于列出当前项目中 @types/node 包及其依赖关系

文章目录 作用示例常用选项示例命令注意事项 1、实战举例**解决方法**1. **锁定唯一的 types/node 版本**2. **清理依赖并重新安装**3. **设置 tsconfig.json 的 types**4. **验证 Promise 类型支持** **总结** npm list types/node 命令用于列出当前项目中 types/node 包及其…

使用 DBSCAN(基于密度的聚类算法) 对二维数据进行聚类分析

代码功能 生成数据&#xff1a; 使用 make_moons 方法生成一个非线性分布的二维数据集&#xff0c;模拟月亮形状的两个半环形分布&#xff0c;同时添加一定的噪声。 数据标准化&#xff1a; 使用 StandardScaler 对数据进行标准化处理&#xff0c;使不同特征的值具有相同的…

【苍穹外卖】学习日志-day1

目录 nginx 反向代理介绍 nginx 的优势 提高访问速度 负载均衡 保证后端服务安全 高并发静态资源 Swagger 生成 API 文档 Swagger 的使用方式 导入knife4j的maven坐标 在配置类中加入knife4j相关配置 设置静态资源映射 通过注解控制生成的接口文档 项目技术点 Token 模式 MD5 加…

炼码LintCode--数据库题库(级别:入门;数量:144道)--刷题笔记_01

目录 炼码LintCode数据库入门级别的笔记未完待续~~~ 炼码LintCode 数据库 入门级别的笔记 笔记如下&#xff0c;把所有涉及到的入门级别的知识点简单总结了一下。 以及一点点举一反三的写法。 增 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);批量增 INSERT INT…

【C语言】连接陷阱探秘(1):声明与定义

目录 一、声明与定义的混淆 1.1. 声明(Declaration) 1.2. 定义(Definition) 1.3. 避免混淆的方法 1.4. 示例 二、声明与定义不匹配 2.1. 常见的不匹配情况 2.2. 解决方法 三、外部变量与静态变量的命名冲突 3.1. 外部变量命名冲突 3.2. 静态变量命名冲突 四、缺…

pycharm快速更换虚拟环境

目录 1. 选择Conda 虚拟环境2. 创建环境3. 直接选择现有虚拟环境 1. 选择Conda 虚拟环境 2. 创建环境 3. 直接选择现有虚拟环境

[代码+论文+讲解]2024数维杯A题:飞机激光测速中的频率估计问题

一、问题背景 空速是飞机相对于空气的速度&#xff0c;是飞行中需要监测的关键参数。空速与飞行状态如攻角和侧偏角密切相关。如果空速数据异常&#xff0c;很容易导致诸如失速等事故。因此&#xff0c;准确测量空速非常重要。 图1:空速激光测速的示意图 激光测速是一种可行的测…

vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-

1.前提&#xff1a; VScode中的git组件执行任何合并动作的时候需要提交远程合并的commit信息&#xff0c;然后编辑器自动打开的是nano文本编辑器 2.nano编辑器说明&#xff1a; 1.保存文件&#xff1a;按 Ctrl O&#xff0c;然后按 Enter 来保存文件。 2.退出编辑器&#xf…

Docker 基础命令介绍和常见报错解决

介绍一些 docker 可能用到的基础命令&#xff0c;并解决三个常见报错&#xff1a; 权限被拒绝&#xff08;Permission Denied&#xff09;无法连接到 Docker 仓库&#xff08;Timeout Exceeded&#xff09;磁盘空间不足&#xff08;No Space Left on Device&#xff09; 命令以…

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉”

【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉” 零、报错 在使用DiskGenius对磁盘分区进行调整时&#xff0c;DiskGenius检查出磁盘报错&#xff0c;报错信息&#xff1a;文件使用的簇被标记为空闲或与其它文件有交叉&#xff0c;…

YOLOv11 C++ TensorRT

引用 YOLOv11 C TensorRT项目是一个用C实现并使用NVIDIA TensorRT进行优化的高性能对象检测解决方案。该项目利用 YOLOv11 模型提供快速准确的对象检测&#xff0c;并利用 TensorRT 最大限度地提高推理效率和性能。 &#x1f4e2; 更新 主要特点&#xff1a; 模型转换&#x…

产品思维如何颠覆我的开发与盈利观-营销自己

之前&#xff0c;我独自一人开发了一个名为“心情追忆”的小程序&#xff0c;旨在帮助用户记录日常的心情变化及重要时刻。从项目的构思、设计、前端&#xff08;小程序&#xff09;开发、后端搭建到最终部署&#xff0c;所有环节都由我一人包办。经过一个月的努力&#xff0c;…