当前位置: 首页 > news >正文

备战蓝桥杯 队列和queue详解

目录

队列的概念

队列的静态实现

总代码

stl的queue

队列算法题

1.队列模板题

2.机器翻译

3.海港

双端队列


队列的概念

和栈一样,队列也是一种访问受限的线性表,它只能在表头位置删除,在表尾位置插入,队列是先进先出(FIFO)栈是后进先出(LIFO)

队列的静态实现

我们用一个比较大的数组来表示队列,h表示队头的前一个元素,t表示队尾元素

队列的创建

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int q[N], h, t;

队列的插入

void push(int x)
{q[++t] = x;
}

和顺序表的尾插差不多,时间复杂度是O(1)

队列的删除

我们的删除直接让头指针向前移动一位就行了

void pop()
{h++;
}

查询队头元素

h指向的是队头的前一个元素的下标,所以h+1是队头的下标

int front()
{return q[h + 1];
}

查询队尾元素

t就是队尾元素的下标

int back()
{return q[t];
}

队列判空

当我们只剩一个元素的时候,h指向这个元素的前面,t指向这个元素,如果删除的话,h++ h就和t相等了,这和我们刚开始没有元素的状态也是一致的,所以h==t就是我们判断队列为空的要点

bool empty()
{return h == t;
}

队列有效元素个数

由于我们h和t是左开右闭的,所以t-h就是中间的元素个数,比如h指向1,t指向3的时候,下标2,3就是我们的元素,3-1=2就是元素个数是一致的

int size()
{return t - h;
}

测试

总代码

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int q[N], h, t;
void push(int x)
{q[++t] = x;
}
void pop()
{h++;
}
int front()
{return q[h + 1];
}
int back()
{return q[t];
}
bool empty()
{return h == t;
}
int size()
{return t - h;
}
int main()
{for (int i = 1; i <= 10; i++){push(i);}while (size()){cout << front() << " " << back() << endl;pop();}return 0;
}

stl的queue

测试代码

#include <iostream>
#include <queue>
using namespace std;
typedef pair<int, int> PII;
int main()
{queue <PII> q;for (int i = 1; i <= 10; i++){q.push({ i,i * 10 });}while (!q.empty()){auto t = q.front();int first = t.first;int second = t.second;cout << first << " " << second << endl;q.pop();}}

测试结果

队列算法题

1.队列模板题

#include <iostream>
using namespace std;
const int N = 1e4+10;
int q[N],h,t;int main()
{int n,op,x;cin >> n;while(n--){cin >> op;if(op == 1){cin >> x;q[++t] = x;}else if(op == 2){if(t-h == 0) cout << "ERR_CANNOT_POP" << endl;else h++;}else if(op == 3){if(t-h == 0) cout << "ERR_CANNOT_QUERY" << endl;else cout << q[h+1] << endl;}else{cout << t-h << endl;}}
}

2.机器翻译

我们可以用队列来模拟这个内存存储的单元格,此外我们还需要一个bool数组来判断某个单词在不在内存中

下面是我们的实现的代码

#include <iostream>
#include <queue>
using namespace std;
const int N = 1010;
bool st[N];
int cnt;
queue <int> q;
int main()
{int n,m;cin >> m >> n;while(n--){int x; cin >> x;if(st[x]);else{q.push(x);st[x] = true;cnt++;if(q.size() > m){st[q.front()] = false;q.pop();}}}cout << cnt << endl;
}

3.海港

这道题我们用队列来模拟,我们用一个数组来记录每个国家的人数,当每个国家从0变1时,种类加1,从1变0时,种类减1

先把每个船的信息入队列,用pair类型,<时间,国家>来入队列,每次入队列判断种类是否加1

每个船的信息入完了之后,要判断队列合不合法,如果队头的时刻和队尾的时刻差值超过24小时,我们就要把第一个时刻的信息出队列,出队列的时候再次判断要不要让种类减1

每次一个信息弄完就打印一下种类

#include <iostream>
#include <queue>
using namespace std;
const int N = 1e5+10;
typedef pair<int,int> PII;
int t,k;
int cnt[N];//记录每个国家的人数,从0到1时种类加1,从1到0时种类减1,其他不变 
int kinds;//记录国家种类 
queue <PII> q;
int main()
{int n;cin >> n;while(n--){cin >> t >> k;while(k--){int x;cin >> x;q.push({t,x});if(cnt[x]++ == 0){kinds++;}}//让队列合法while(q.size() && (q.back().first - q.front().first >= 86400)) {int tmp;tmp = q.front().second;if(cnt[tmp]-- == 1){kinds--;}q.pop();}cout << kinds << endl;}	return 0;} 

双端队列

什么是双端队列?

双端队列也是一种特殊的线性表,它允许在表的两端插入和删除元素

我们就不实现它的模拟实现了

我们直接用stl现成的双端队列deque测试一下

头插头删

#include <iostream>
#include <deque>
using namespace std;
struct node {int x, y, z;
};
deque <node> q;
int main()
{//头插和头删for (int i = 1; i <= 5; i++){q.push_front({ i,i * 5,i * 10 });}while (q.size()){auto t = q.front();q.pop_front();cout << t.x << " " << t.y << " " << t.z << endl;}
}

同理尾插和尾删

#include <iostream>
#include <deque>
using namespace std;
struct node {int x, y, z;
};
deque <node> q;
int main()
{//尾插和尾删for (int i = 1; i <= 5; i++){q.push_back({ i,i * 5,i * 10 });}while (q.size()){auto t = q.back();q.pop_back();cout << t.x << " " << t.y << " " << t.z << endl;}
}

相关文章:

备战蓝桥杯 队列和queue详解

目录 队列的概念 队列的静态实现 总代码 stl的queue 队列算法题 1.队列模板题 2.机器翻译 3.海港 双端队列 队列的概念 和栈一样&#xff0c;队列也是一种访问受限的线性表&#xff0c;它只能在表头位置删除&#xff0c;在表尾位置插入&#xff0c;队列是先进先出&…...

IT面试求职系列主题-Jenkins

想成功求职&#xff0c;必要的IT技能一样不能少&#xff0c;先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统&#xff0c;并在发生更改时启动和监视构建系统。 2&#xff09;Maven、Ant和Jenkins有什么区别…...

Vue篇-06

1、路由简介 vue-rooter&#xff1a;是vue的一个插件库&#xff0c;专门用来实现SPA应用 1.1、对SPA应用的理解 1、单页 Web 应用&#xff08;single page web application&#xff0c;SPA&#xff09;。 2、整个应用只有一个完整的页面 index.html。 3、点击页面中的导航链…...

mysql binlog 日志分析查找

文章目录 前言一、分析 binlog 内容二、编写脚本结果总结 前言 高效快捷分析 mysql binlog 日志文件。 mysql binlog 文件很大 怎么快速通过关键字查找内容 一、分析 binlog 内容 通过 mysqlbinlog 命令可以看到 binlog 解析之后的大概样子 二、编写脚本 编写脚本 search_…...

ubuntu 配置OpenOCD与RT-RT-thread环境的记录

1.git clone git://git.code.sf.net/p/openocd/code openocd 配置gcc编译环境 2. sudo gedit /etc/apt/source.list #cdrom sudo apt-get install git sudo apt-get install libtool-bin sudo apt-get install pkg-config sudo apt-install libusb-1.0-0-dev sudo apt-get…...

双系统解决开机提示security Policy Violation的方法

最近&#xff0c;Windows系统更新后&#xff0c;发现电脑开机无法进入桌面&#xff0c;显示“Verifiying shim SBAT data failed: security Policy Violation; So mething has gone seriously Wrong: SBAT self-check failed: Security Policy Violation”的英文错误信息。为了…...

附加共享数据库( ATTACH DATABASE)的使用场景

附加共享数据库&#xff08;使用 ATTACH DATABASE&#xff09;的功能非常实用&#xff0c;通常会在以下几种场景下需要用到&#xff1a; 1. 跨数据库查询和分析 场景&#xff1a; 你的公司有两个独立的数据库&#xff1a; 一个存储了学生信息 (school.db)一个存储了员工信息 …...

matlab的绘图的标题中(title)添加标量以及格式化输出

有时候我们需要在matlab绘制的图像的标题中添加一些变量&#xff0c;这样在修改某些参数后&#xff0c;标题会跟着一块儿变。可以采用如下的方法&#xff1a; x -10:0.1:10; %x轴的范围 mu 0; %均值 sigma 1; %标准差 y normpdf(x,mu,sigma); %使用normpdf函数生成高斯函数…...

2、第一个GO 程序

引言 接下里我们就用Go Land 工具&#xff0c;开发第一个GO程序。大家也可以用其他的开发工具&#xff0c;例如 Vs Code 1、新建项目 第一个是选择你的程序保存位置 &#xff08;不要有中文&#xff09;。 第二个是你的Go的编译器的安装地址。 选择完毕后&#xff0c;就点击 …...

【Linux-多线程】-线程安全单例模式+可重入vs线程安全+死锁等

一、线程安全的单例模式 什么是单例模式 单例模式是一种“经典的&#xff0c;常用的&#xff0c;常考的”设计模式 什么是设计模式 IT行业这么火&#xff0c;涌入的人很多.俗话说林子大了啥鸟都有。大佬和菜鸡们两极分化的越来越严重&#xff0c;为了让菜鸡们不太拖大佬的后…...

00000007_C语言设计模式

C语言设计模式 尽管 C 语言并不直接支持面向对象编程&#xff0c;但通过结构体和函数指针的灵活运用&#xff0c;我们依然可以实现多种经典的设计模式。 1. 工厂模式 1.1 工厂方法的定义与实现 工厂模式通过统一的接口创建对象&#xff0c;客户端无需知道具体的创建逻辑。 代…...

探索数据存储的奥秘:深入理解B树与B+树

key value 类型的数据红黑树&#xff08;最优二叉树&#xff0c;内存最优&#xff09;&#xff0c;时间复杂度&#xff1a;O&#xff08;logn&#xff09;,调整方便&#xff1b;一个结点分出两个叉B树一个节点可以分出很多叉数据量相等的条件下&#xff1a;红黑树的层数很高&am…...

Web渗透测试之XSS跨站脚本之JS输出 以及 什么是闭合标签 一篇文章给你说明白

目录 闭合标签 XSS之js输出 闭合标签 封闭标签 达到 让标签值不当成 一个属性值来展示 从而达到xss注入的效果 "> 为了想办法闭合前面的标签,不用也行成功率高一些 攻击方法 "><script>confirm(1)</script>, 其中 "> 我们称之为完成闭合…...

EasyExcel的应用

一、简单使用 引入依赖&#xff1a; 这里我们可以使用最新的4.0.2版本&#xff0c;也可以选择之前的稳定版本&#xff0c;3.1.x以后的版本API大致相同&#xff0c;新的版本也会向前兼容&#xff08;3.1.x之前的版本&#xff0c;部分API可能在高版本被废弃&#xff09;&…...

VS Code的设置功能以及多层级的设置方式与解密

VS Code的Settings功能为用户提供了极大的灵活性和便利性&#xff0c;使得用户可以根据自己的需求和偏好来定制编辑器的行为和外观。 Settings 可以实现的具体功能 VS Code的设置项非常丰富&#xff0c;涵盖了各个方面&#xff0c;包括但不限于&#xff1a; 编辑器选项&…...

UI自动化测试框架playwright--初级入门

一、背景&#xff1a;UI自动化的痛点&#xff1a; 1、设计脚本耗时&#xff1a; 需要思考要如何模拟用户的操作&#xff0c;如何触发页面的事件&#xff0c;还要思考如何设计脚本&#xff0c;定位和操作要交互的元素、路径、位置&#xff0c;再编写代码逻辑&#xff0c;往复循…...

SQL多表联查、自定义函数(字符串分割split)、xml格式输出

记录一个报表的统计&#xff0c;大概内容如下&#xff1a; 多表联查涉及的报表有&#xff1a;房间表、买家表、合同表、交易表、费用表、修改记录表 注意&#xff1a;本项目数据库使用的是sqlserver&#xff08;mssql&#xff09;&#xff0c;非mysql。 难点1:业主信息&#…...

Fast API使用

相关的代码上都有注释&#xff0c;其中前端代码是用来提交表单的 此代码进行了跨域处理&#xff0c;允许前端直接提交表单&#xff0c;并正常返回 完整代码&#xff1a; from typing import Unionfrom fastapi import Header, Cookie from pydantic import BaseModel, Field f…...

LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145056912 Llama 3 是 Meta 公司发布的开源大型语言模型&#xff0c;包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型&#xff0c;支持…...

MySQL 中删除重复数据 SQL 写法

要在 MySQL 中删除重复的数据并只保留一条&#xff0c;可以使用下面的方法&#xff08;要用的时候直接复制小改下条件和表名称即即可&#xff09; 方法一&#xff1a;使用 left join 子查询删除重复数据(推荐) 温馨提示&#xff1a;本人在 500w 数据下执行此 SQL 耗费 15s-30s…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...