一、题目描述

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 以文本方式显示

  1. 9↵
  2. Arrive Mike↵
  3. Arrive Zhangsan↵
  4. QueueHead↵
  5. QueueTail↵
  6. Leave↵
  7. QueueHead↵
  8. Leave↵
  9. QueueHead↵
  10. QueueTail↵
以文本方式显示

  1. Mike↵
  2. Zhangsan↵
  3. Zhangsan↵
  4. Empty queue↵
  5. 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++ | 队列基础相关推荐

  1. 环形队列出队的元素怎么输出出来_队列:队列在线程池等有限资源池中的应用...

    我们知道,CPU资源是有限的,任务的处理速度与线程个数并不是线性正相关的.相反,过多的线程反而会导致CPU频繁切换,处理性能下降.所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设 ...

  2. java队列 双队列_Java队列– Java队列

    java队列 双队列 Java Queue is an interface available in java.util package and extends java.util.Collectio ...

  3. java先进先出 循环队列_java队列--先进先出(循环队列、链队列)

    队列:只允许在一端进行插入操作(队尾),在另一端进行删除操作(队头). 队列的特征就是: 先进先出. 队列的思想及实现也同样非常简单.在生活中的各种常常都需要排队进行,键盘中缓存区.操作系统中的作业调 ...

  4. 链式队列,队列篇(链式队列的出队入队操作)

    数据结构,队列篇(链式队列) 前言: 上一篇博主简单讲解了顺序队列和循环队列,今天讲解队列最后一篇链式队,链式队在数据结构中用到比较多,用来做一些排队的算法,还有链式队列是也是和链式栈一样采用链表的方 ...

  5. 十、【栈和队列】队列

    队列 Queue 队列和栈一样,也属于受限线性表. 1 队列的基本概念 1.1 队列的定义 队列是只允许在表尾进行插入,表头进行删除的线性表.插入操作又称为入队,删除操作又称为出队. 队列的逻辑关系就 ...

  6. RabbitMQ,Springboot整合RabbitMQ实现 消息可靠性投递,Consumer ACK,TTL,死信队列,使用TTL+死信队列=延迟队列

    搭建SpringBoot项目,用于演示 springboot版本 <!-- spring boot --><dependency><groupId>org.spri ...

  7. java先进先出 循环队列,JavaScript队列、优先队列与循环队列

    队列是一种遵从先进先出(FIFO)原则的有序集合 队列在尾部添加新元素,从顶部移除元素 队列的理解 队列在我们生活中最常见的场景就是排队了 队列这个名字也已经很通俗易懂了 和栈很像,这不过队列是先入先 ...

  8. java集合——队列和双端队列+优先级队列

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合--队列和双端队列+优先级队列 的相关知识: 0.2) for full sou ...

  9. 09 | 队列:队列在线程池等有限资源池中的应用

    队列定义 先进者先出,这就是典型的"队列".队列跟栈一样,也是一种操作受限的线性表数据结构. 顺序队列和链式队列 顺序队列:用数组实现的队列 // 用数组实现的队列 public ...

  10. 如何手撸一个队列?队列详解和面试题汇总(含答案)

    队列(Queue):与栈相对的一种数据结构, 集合(Collection)的一个子类.队列允许在一端进行插入操作,而在另一端进行删除操作的线性表,栈的特点是后进先出,而队列的特点是先进先出.队列的用处 ...

最新文章

  1. SAP RETAIL WA03 基于分配表创建PO报错 - No work list could be selected –
  2. Spring Aop开发过程中可能出现的异常(通过这些异常可以知道需要什么Jar包)
  3. 算法设计与分析(第三周)递归/迭代求Fibonacci前n项 【以及递归算法速度慢的原因】
  4. C# 各版本新增功能
  5. Selenium和Appium教程合集
  6. stm32 OV7670/摄像头模块颜色区域定位(腐蚀中心算法)
  7. 计算机启动命令提示符,7种方式在Windows 10中打开或启动命令提示符 | MOS86
  8. 全国各省市固定资本形成额数据 (1990-2018年)
  9. 高频易揭:美五大高频易访录
  10. 【Linux】一步一步学Linux——stty命令(243)
  11. 在模仿学习中进步的智能机器人
  12. PySpark与GraphFrames的安装与使用
  13. python如何把ts视频拼接起来_Python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频...
  14. VSTO:使用C#开发Excel、Word【10】
  15. day01.我们为什么要学习进制
  16. centos安装telnet
  17. python zookeeper_python操作zookeeper
  18. omnet学习记录之tictoc1-18
  19. Matlab中运算符优先级
  20. PHP设计模式(一)

热门文章

  1. react如何跳转html页面,react中实现点击跳转到新页面方法
  2. 京东店铺的所有商品API接口(item_search_shop-获得店铺的所有商品API接口),整店商品API接口
  3. Hbuilder真机运行安卓机找不到设备及找到设备后提示手机未安装android_base.apk问题解决办法
  4. HttpURLConnection使用方法——无脸怪
  5. HD-Map lanelet2(1)
  6. 包装是品牌设计中最直接最有效的广告载体
  7. 启动项无法删除的解决办法。
  8. 开源框架专栏-spring(1)
  9. java gil_为什么 Java 没有 GIL?
  10. 1984 和美丽新世界