备战蓝桥杯 队列和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;}
}
相关文章:
![](https://i-blog.csdnimg.cn/direct/7264c764f554465ea1fa600ea2c0ce3b.png)
备战蓝桥杯 队列和queue详解
目录 队列的概念 队列的静态实现 总代码 stl的queue 队列算法题 1.队列模板题 2.机器翻译 3.海港 双端队列 队列的概念 和栈一样,队列也是一种访问受限的线性表,它只能在表头位置删除,在表尾位置插入,队列是先进先出&…...
![](https://i-blog.csdnimg.cn/direct/cace272f4c234ed7888cb62bd86d227a.jpeg)
IT面试求职系列主题-Jenkins
想成功求职,必要的IT技能一样不能少,先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统,并在发生更改时启动和监视构建系统。 2)Maven、Ant和Jenkins有什么区别…...
![](https://i-blog.csdnimg.cn/direct/1321f81a45ad4a34a6505f8a305e0b5b.png)
Vue篇-06
1、路由简介 vue-rooter:是vue的一个插件库,专门用来实现SPA应用 1.1、对SPA应用的理解 1、单页 Web 应用(single page web application,SPA)。 2、整个应用只有一个完整的页面 index.html。 3、点击页面中的导航链…...
![](https://i-blog.csdnimg.cn/direct/a46f12e580824c8eae50d99e6b996a7f.png)
mysql binlog 日志分析查找
文章目录 前言一、分析 binlog 内容二、编写脚本结果总结 前言 高效快捷分析 mysql binlog 日志文件。 mysql binlog 文件很大 怎么快速通过关键字查找内容 一、分析 binlog 内容 通过 mysqlbinlog 命令可以看到 binlog 解析之后的大概样子 二、编写脚本 编写脚本 search_…...
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://i-blog.csdnimg.cn/direct/60de5bf9cf1d4a9caf03506b45a18863.png)
双系统解决开机提示security Policy Violation的方法
最近,Windows系统更新后,发现电脑开机无法进入桌面,显示“Verifiying shim SBAT data failed: security Policy Violation; So mething has gone seriously Wrong: SBAT self-check failed: Security Policy Violation”的英文错误信息。为了…...
![](https://www.ngui.cc/images/no-images.jpg)
附加共享数据库( ATTACH DATABASE)的使用场景
附加共享数据库(使用 ATTACH DATABASE)的功能非常实用,通常会在以下几种场景下需要用到: 1. 跨数据库查询和分析 场景: 你的公司有两个独立的数据库: 一个存储了学生信息 (school.db)一个存储了员工信息 …...
![](https://i-blog.csdnimg.cn/direct/9153a4f0249f498c98a99df91aabe1f9.jpeg#pic_center)
matlab的绘图的标题中(title)添加标量以及格式化输出
有时候我们需要在matlab绘制的图像的标题中添加一些变量,这样在修改某些参数后,标题会跟着一块儿变。可以采用如下的方法: x -10:0.1:10; %x轴的范围 mu 0; %均值 sigma 1; %标准差 y normpdf(x,mu,sigma); %使用normpdf函数生成高斯函数…...
![](https://i-blog.csdnimg.cn/img_convert/c58b2968a662e143c4b448dc2efcdd26.png)
2、第一个GO 程序
引言 接下里我们就用Go Land 工具,开发第一个GO程序。大家也可以用其他的开发工具,例如 Vs Code 1、新建项目 第一个是选择你的程序保存位置 (不要有中文)。 第二个是你的Go的编译器的安装地址。 选择完毕后,就点击 …...
![](https://i-blog.csdnimg.cn/direct/72610ea0be864826af7343e6413ff628.png)
【Linux-多线程】-线程安全单例模式+可重入vs线程安全+死锁等
一、线程安全的单例模式 什么是单例模式 单例模式是一种“经典的,常用的,常考的”设计模式 什么是设计模式 IT行业这么火,涌入的人很多.俗话说林子大了啥鸟都有。大佬和菜鸡们两极分化的越来越严重,为了让菜鸡们不太拖大佬的后…...
![](https://www.ngui.cc/images/no-images.jpg)
00000007_C语言设计模式
C语言设计模式 尽管 C 语言并不直接支持面向对象编程,但通过结构体和函数指针的灵活运用,我们依然可以实现多种经典的设计模式。 1. 工厂模式 1.1 工厂方法的定义与实现 工厂模式通过统一的接口创建对象,客户端无需知道具体的创建逻辑。 代…...
![](https://i-blog.csdnimg.cn/direct/dea9a5f4a4164867a5b4f458e50158a8.png)
探索数据存储的奥秘:深入理解B树与B+树
key value 类型的数据红黑树(最优二叉树,内存最优),时间复杂度:O(logn),调整方便;一个结点分出两个叉B树一个节点可以分出很多叉数据量相等的条件下:红黑树的层数很高&am…...
![](https://i-blog.csdnimg.cn/direct/be58eea460724be8a74913839b1903cf.png)
Web渗透测试之XSS跨站脚本之JS输出 以及 什么是闭合标签 一篇文章给你说明白
目录 闭合标签 XSS之js输出 闭合标签 封闭标签 达到 让标签值不当成 一个属性值来展示 从而达到xss注入的效果 "> 为了想办法闭合前面的标签,不用也行成功率高一些 攻击方法 "><script>confirm(1)</script>, 其中 "> 我们称之为完成闭合…...
![](https://www.ngui.cc/images/no-images.jpg)
EasyExcel的应用
一、简单使用 引入依赖: 这里我们可以使用最新的4.0.2版本,也可以选择之前的稳定版本,3.1.x以后的版本API大致相同,新的版本也会向前兼容(3.1.x之前的版本,部分API可能在高版本被废弃)&…...
![](https://i-blog.csdnimg.cn/direct/47bc0176f851423c9ebb1fedca426c9d.png)
VS Code的设置功能以及多层级的设置方式与解密
VS Code的Settings功能为用户提供了极大的灵活性和便利性,使得用户可以根据自己的需求和偏好来定制编辑器的行为和外观。 Settings 可以实现的具体功能 VS Code的设置项非常丰富,涵盖了各个方面,包括但不限于: 编辑器选项&…...
![](https://i-blog.csdnimg.cn/direct/6fe32950c6cc4b3992c3a97fdb0b89ad.png)
UI自动化测试框架playwright--初级入门
一、背景:UI自动化的痛点: 1、设计脚本耗时: 需要思考要如何模拟用户的操作,如何触发页面的事件,还要思考如何设计脚本,定位和操作要交互的元素、路径、位置,再编写代码逻辑,往复循…...
![](https://i-blog.csdnimg.cn/direct/f94e498ee3d246699a9c3cee60842621.png)
SQL多表联查、自定义函数(字符串分割split)、xml格式输出
记录一个报表的统计,大概内容如下: 多表联查涉及的报表有:房间表、买家表、合同表、交易表、费用表、修改记录表 注意:本项目数据库使用的是sqlserver(mssql),非mysql。 难点1:业主信息&#…...
![](https://www.ngui.cc/images/no-images.jpg)
Fast API使用
相关的代码上都有注释,其中前端代码是用来提交表单的 此代码进行了跨域处理,允许前端直接提交表单,并正常返回 完整代码: from typing import Unionfrom fastapi import Header, Cookie from pydantic import BaseModel, Field f…...
![](https://i-blog.csdnimg.cn/direct/a3421f9aaf4f4effab372dfbbffcaf50.png)
LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145056912 Llama 3 是 Meta 公司发布的开源大型语言模型,包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型,支持…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL 中删除重复数据 SQL 写法
要在 MySQL 中删除重复的数据并只保留一条,可以使用下面的方法(要用的时候直接复制小改下条件和表名称即即可) 方法一:使用 left join 子查询删除重复数据(推荐) 温馨提示:本人在 500w 数据下执行此 SQL 耗费 15s-30s…...
![](https://www.ngui.cc/images/no-images.jpg)
docker minio镜像arm64架构
minio版本为RELEASE.2021-09-03T03-56-13Z 原项目信创改造,服务器资源改为了arm64架构,统信uos docker镜像库内没有对应的minio镜像,当前镜像为拉取源码后,自编译打包镜像,亲测可用。 使用方式 将tar包导入到服务器…...
![](https://www.ngui.cc/images/no-images.jpg)
VUE3 监听器(watch)
在 Vue 3 中,监听器(watch)是用来观察响应式数据的变化,并在数据发生变化时执行相应操作的机制。watch 主要用于响应式数据变化时的副作用处理,比如异步操作、数据更新等。 1. 基础使用 在 Vue 3 中,watc…...
![](https://www.ngui.cc/images/no-images.jpg)
CAPL如何设置TCP/IP传输层动态端口范围
在TCP/IP协议中,应用程序通过传输层协议TCP/UDP传输数据,接收方传输层收到数据后,根据传输层端口号把接收的数据上交给正确的应用程序。我们可以简单地认为传输层端口号是应用程序的标识,这就是为什么我们说应用程序在使用TCP/IP协议通信时要打开传输层端口号或者绑定端口号…...
![](https://www.ngui.cc/images/no-images.jpg)
随记:有关Springboot项目中的时间格式实现的几种方式
1.注解 JsonFormat DateTimeFormat import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDateTime;public class Event {// 序列化和反序列化时生效JsonFormat(pattern "yyyy-MM…...
![](https://www.ngui.cc/images/no-images.jpg)
IntelliJ IDEA 优化设置
针对 Java 开发,IntelliJ IDEA 有许多优化设置,可以帮助提高代码编写、调试、构建和运行的效率。以下是一些针对 Java 开发的优化建议: 1. 增加 JVM 内存和性能优化 增加堆内存: 通过调整 idea.vmoptions 文件,增加 IntelliJ ID…...
![](https://i-blog.csdnimg.cn/direct/8335a8b4f812437bb92e819653b0e56a.png)
jsp企业财务管理系统设计与实现
企业财务管理系统 摘要 对于企业集来说,财务管理的地位很重要。随着计算机和网络在企业中的广泛应用,企业发展速度在不断加快,在这种市场竞争冲击下企业财务管理系统必须优先发展,这样才能保证在竞争中处于优势地位。对此企业必须实现财务管理…...
![](https://www.ngui.cc/images/no-images.jpg)
EscherNet运行笔记
文章标题:EscherNet: A Generative Model for Scalable View Synthesis 1. 环境配置 conda env create -f environment.yml -n eschernet conda activate eschernet 2. 数据下载 wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz 3…...
![](https://www.ngui.cc/images/no-images.jpg)
Java中的反射机制及其应用场景
目录 什么是Java反射机制? 工作原理 主要应用场景 注意事项 总结 什么是Java反射机制? Java反射机制是一种强大的工具,它允许程序在运行时访问、检查和修改其本身的类和对象的信息。通过反射,开发者可以在不知道类的具体实现…...
![](https://i-blog.csdnimg.cn/direct/3d0da6f16bc14fcf8b6743818690d394.png)
信息科技伦理与道德3:智能决策
1 概述 1.1 发展历史 1950s-1980s:人工智能的诞生与早期发展热潮 1950年:图灵发表了一篇划时代的论文,并提出了著名的“图灵测试”;1956年:达特茅斯会议首次提出“人工智能”概念;1956年-20世纪70年代&a…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=assets%2Fcomponents.B1JZbf0_.png&pos_id=img-OD9aqqVT-1736380938373)
青少年编程与数学 02-006 前端开发框架VUE 16课题、组件基础
青少年编程与数学 02-006 前端开发框架VUE 16课题、组件基础 一、定义一个组件二、使用组件三、传递 props四、监听事件五、通过插槽来分配内容六、动态组件七、DOM 内模板解析注意事项1、大小写区分2、闭合标签3、元素位置限制 课题摘要:本文介绍了Vue.js中的组件基础…...
![](https://img-blog.csdnimg.cn/img_convert/20bf10020e3a0a35f3814433fd5446a9.png)
响应式网站 手机版/如何创建一个个人网站
都说磨刀不误砍柴工,同样学习跟磨刀一样,亦是同样道理。成功都是需要厚积薄发。今天来学习一下Excel表格如何忽略隐藏行或是忽略隐藏列进行求和。一、忽略隐藏行求和例如,以下表格:平时看到这么一个表格,需要给产品汇总…...
![](http://www.rainsts.net/styles/default/images/smilies/icon_smile.gif)
wang域名 网站/打广告去哪个平台
原文:http://www.rainsts.net/article.asp?id551 从网上搜集的一些英文版 WPF、WCF、WF、LINQ 图书。 虽然个别地方和 VS2008 Beta2 有些出入,但还是值得一读的。 至于啃洋文啃到头晕,皆与我无关~~~~~~~WPF (Windows Presentation Foundation) Foundati…...
![](/images/no-images.jpg)
北京三屏网站制作/中央新闻频道直播今天
【PConline深圳站行情】条码打印机的应用在我们生活中已经屡见不鲜,超市中的产品标签打印既是这类产品制造出来的,大部分条码打印机只能针对不同行业需求进行打印,而且其价格不菲。如果出现一款能应用于多种行业且经济实惠的产品,…...
![](https://img-blog.csdnimg.cn/img_convert/504a55ccf7e906f7689cfdc7d7a1ce82.png)
什么网站做弹窗广告好/百度怎么收录网站
点击关注我,发现更多创意礼物!!想要购买直接看原文:https://www.haowuguo.com/257033.html现在安卓平板可以选择的不是很多了,最近安卓新出的平板也很少,其中比较有吸引力的就是联想的小新pad了,…...
![](https://img-blog.csdnimg.cn/de30ef0ab2864a469dd8dd8eddb7b3d1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA0ohB0ohh0ohy0ohv0ohu0ojguIjguLgg4Lia,size_17,color_FFFFFF,t_70,g_se,x_16)
网站制作上海/长沙网站优化对策
使用匿名函数(lambda表达式):使用lambda表达式就代表一个函数名称,也就是说不用再为函数重新创建一个名字了。(以前在使用函数的时候需要用def来定义一个函数名,而使用lambda表达式就不需要再创建函数名了&…...
![](/images/no-images.jpg)
大型网站域名/网页制作工具
续上文。来的时候就琢磨着看什么,心想无人区和私人定制都刚上映不久,犹豫着看那部电影的时候,就看见约我的那个女孩站在电影院门口,身边还有一名男子,不知道在争吵什么。我的英雄气节促使我大步就上去问个究竟。“怎么…...