打饭队列 | c++ | 队列基础
一、题目描述
Description
小张经常会在打饭排队的时候由于无聊而东张西望。今天他对隔壁的打饭队伍进行了详细观察。隔壁队伍每次到达一名同学,他就会记录下这个同学的名字,同时队伍的第一个同学打饭完成后会离开队伍。同时小张有时候想关注一下队首或队尾的同学是谁。
小张正在忙着排队打饭,请你帮助他完成这一件任务。
Input
第一行一个数 n(1 ≤ n ≤ 1e6,表示小张要求你实现的操作数量。
接下来行,有以下四种操作。
1. Arrive Student_name 表示一名叫"Student_name"的同学到达了。保证名字的长度小于20,且只有英文字母。
2. Leave,表示队首的同学打完饭离开。
3. QueueHead,查询队首的同学名字,如果队列为空,输出"Empty queue",不加引号。
4. QueueTail,查询队尾的同学名字,如果队列为空,输出"Empty queue",不加引号。
Output
按照操作要求进行输出。
测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 11 以文本方式显示
- 9↵
- Arrive Mike↵
- Arrive Zhangsan↵
- QueueHead↵
- QueueTail↵
- Leave↵
- QueueHead↵
- Leave↵
- QueueHead↵
- QueueTail↵
以文本方式显示
- Mike↵
- Zhangsan↵
- Zhangsan↵
- Empty queue↵
- Empty queue↵
1秒 64M 0
二、题目分析
这还需要分析吗?(误)
题目非常简单,一眼就能看出来是考察队列的基本操作。就算看不出来,没关系,题目里面也包含了一个“队列”。
主要是这题代码里出现了一些我以前没有用过的函数,借此机会以笔记的形式放在这里。
三、代码实现
一个基本的队列可能是长这样的:
struct queue
{int a[N];int front = 0 , rear = 0;void push( int num ) {if ( rear+1 < N ) {a[ rear ] = num; rear ++;}}void pop() {if ( front < rear ) front++;}int top() {if ( front < rear ) return a[ front ];}int size() {return rear - front ;}
};
其中top()是顶部元素。
函数一:getline(cin,str)读取一整行
如果直接采用cin >> str,有一个缺点就是遇到空格就停止读入了,这样当我们需要一次性读入一整行字符串的时候就不方便了。使用这个函数可以直接读取一行,而且写起来也很简便。
什么?你问scanf?我知道scanf里%s可以读取char类型的字符串,貌似读不了string类型的字符串。(可能有其他方式让scanf能够读入string类型的字符串,既不知则不谈。)
函数二:str.substr(a,b)提取子串
举例来说,下面一小段代码
string a = "Arrive Susan";
string b;b = a.substr(7,5);
cout << b ;
输出结果为
Susan
在str.substr(a,b)中,str是母串,a是复制的起点,b是复制的字符数量。
另外再补充一点,选择string是因为可以直接比较两个字符串是否相等,对这道题来说真的非常方便。
四、完整代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
string name[N];struct que
{int front = 0 , rear = 0;void push(string n) {if ( rear+1 < N ) {name[rear] = n; rear ++;}}void pop() {if ( front < rear ) front++;}void top() {if ( front < rear ) {cout << name[front] << endl;}else cout << "Empty queue" << endl;}void bottom() {if ( front < rear ) {cout << name[rear-1] << endl;}else cout << "Empty queue" << endl;}
};int main(){int n;scanf("%d",&n);struct que Q;string operation;getline(cin,operation);//读入scanf("%d",&n)后面的回车.for (int i=0;i<n;i++) {getline(cin,operation);if ( operation == "QueueHead" ) {Q.top();}else if ( operation == "QueueTail" ) {Q.bottom();}else if ( operation == "Leave" ) {Q.pop();}else {int len = operation.length();string b = operation.substr(7,len-7);Q.push(b);}}return 0;
}
好了,最后分享一件很离奇的事情:第一遍交,有一个样例超时;同样的代码再交一次,诶?过了。
打饭队列 | c++ | 队列基础相关推荐
- 环形队列出队的元素怎么输出出来_队列:队列在线程池等有限资源池中的应用...
我们知道,CPU资源是有限的,任务的处理速度与线程个数并不是线性正相关的.相反,过多的线程反而会导致CPU频繁切换,处理性能下降.所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设 ...
- java队列 双队列_Java队列– Java队列
java队列 双队列 Java Queue is an interface available in java.util package and extends java.util.Collectio ...
- java先进先出 循环队列_java队列--先进先出(循环队列、链队列)
队列:只允许在一端进行插入操作(队尾),在另一端进行删除操作(队头). 队列的特征就是: 先进先出. 队列的思想及实现也同样非常简单.在生活中的各种常常都需要排队进行,键盘中缓存区.操作系统中的作业调 ...
- 链式队列,队列篇(链式队列的出队入队操作)
数据结构,队列篇(链式队列) 前言: 上一篇博主简单讲解了顺序队列和循环队列,今天讲解队列最后一篇链式队,链式队在数据结构中用到比较多,用来做一些排队的算法,还有链式队列是也是和链式栈一样采用链表的方 ...
- 十、【栈和队列】队列
队列 Queue 队列和栈一样,也属于受限线性表. 1 队列的基本概念 1.1 队列的定义 队列是只允许在表尾进行插入,表头进行删除的线性表.插入操作又称为入队,删除操作又称为出队. 队列的逻辑关系就 ...
- RabbitMQ,Springboot整合RabbitMQ实现 消息可靠性投递,Consumer ACK,TTL,死信队列,使用TTL+死信队列=延迟队列
搭建SpringBoot项目,用于演示 springboot版本 <!-- spring boot --><dependency><groupId>org.spri ...
- java先进先出 循环队列,JavaScript队列、优先队列与循环队列
队列是一种遵从先进先出(FIFO)原则的有序集合 队列在尾部添加新元素,从顶部移除元素 队列的理解 队列在我们生活中最常见的场景就是排队了 队列这个名字也已经很通俗易懂了 和栈很像,这不过队列是先入先 ...
- java集合——队列和双端队列+优先级队列
[0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合--队列和双端队列+优先级队列 的相关知识: 0.2) for full sou ...
- 09 | 队列:队列在线程池等有限资源池中的应用
队列定义 先进者先出,这就是典型的"队列".队列跟栈一样,也是一种操作受限的线性表数据结构. 顺序队列和链式队列 顺序队列:用数组实现的队列 // 用数组实现的队列 public ...
- 如何手撸一个队列?队列详解和面试题汇总(含答案)
队列(Queue):与栈相对的一种数据结构, 集合(Collection)的一个子类.队列允许在一端进行插入操作,而在另一端进行删除操作的线性表,栈的特点是后进先出,而队列的特点是先进先出.队列的用处 ...
最新文章
- SAP RETAIL WA03 基于分配表创建PO报错 - No work list could be selected –
- Spring Aop开发过程中可能出现的异常(通过这些异常可以知道需要什么Jar包)
- 算法设计与分析(第三周)递归/迭代求Fibonacci前n项 【以及递归算法速度慢的原因】
- C# 各版本新增功能
- Selenium和Appium教程合集
- stm32 OV7670/摄像头模块颜色区域定位(腐蚀中心算法)
- 计算机启动命令提示符,7种方式在Windows 10中打开或启动命令提示符 | MOS86
- 全国各省市固定资本形成额数据 (1990-2018年)
- 高频易揭:美五大高频易访录
- 【Linux】一步一步学Linux——stty命令(243)
- 在模仿学习中进步的智能机器人
- PySpark与GraphFrames的安装与使用
- python如何把ts视频拼接起来_Python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频...
- VSTO:使用C#开发Excel、Word【10】
- day01.我们为什么要学习进制
- centos安装telnet
- python zookeeper_python操作zookeeper
- omnet学习记录之tictoc1-18
- Matlab中运算符优先级
- PHP设计模式(一)
热门文章
- react如何跳转html页面,react中实现点击跳转到新页面方法
- 京东店铺的所有商品API接口(item_search_shop-获得店铺的所有商品API接口),整店商品API接口
- Hbuilder真机运行安卓机找不到设备及找到设备后提示手机未安装android_base.apk问题解决办法
- HttpURLConnection使用方法——无脸怪
- HD-Map lanelet2(1)
- 包装是品牌设计中最直接最有效的广告载体
- 启动项无法删除的解决办法。
- 开源框架专栏-spring(1)
- java gil_为什么 Java 没有 GIL?
- 1984 和美丽新世界