首页 > 编程语言 >[C++/PTA] 办事大厅排队

[C++/PTA] 办事大厅排队

时间:2023-06-14 21:55:11浏览次数:49  
标签:输出 NULL name 队列 排队 C++ 链表 PTA include

题目要求

在郑州大学综合办事大厅,每天陆陆续续有很多人来排队办事。现在你能否写程序帮助老师时刻了解当前办理业务的情况。

输入格式:
第一行一个数字N,表示排队信息或者查询信息条目的数量。

以下N行,每行的内容有以下3种情况
(1) in name 表示名字为name的人员新来到办事大厅,排在队伍的最后。(in和name间存在一个空格,name是名字对应字符串,长度不超过10)。

(2) out 表示当前排在最前面的人已经办理完业务,离开了。

(3) q 表示一次查询,请输出当前正在办理业务的人,也就是队伍的第1个人。如果当前无人办理业务,则输出“NULL”,不包括引号。

输出格式:
请根据以上信息,每次遇到查询时,对应一行输出。如果这时队伍有人,则输出第一个人的姓名,否则输出NULL。

输入样例:
5
in A
out
q
in B
q

输出样例:
在这里给出相应的输出。例如:
NULL
B

解题思路

本题需要实现一个排队办事的程序,要求能够处理插入、弹出和查询等操作,并要求能够实时输出当前正在处理业务的人员姓名。

由于需要随时弹出队列头部的元素,因此可以考虑使用队列或者链表来实现。

对于使用队列来实现的思路,可以使用 STL 中的 queue 容器。具体思路为:

  1. 从标准输入读取一个整数 n,表示随后要进行操作的次数;
  2. 创建一个空的队列 q;
  3. 循环进行 n 次操作,每次从标准输入读取一个字符串 s;
  4. 如果 s 为 "in",则从标准输入读取一个字符串 name,并将其添加到队列 q 的尾部;
  5. 如果 s 为 "out",则弹出队列 q 的头部元素;
  6. 如果 s 为 "q",则输出队列 q 的头部元素(如果为空则输出 "NULL");
  7. 循环结束后程序运行结束。

对于使用链表来实现的思路,可以使用 STL 中的 list 容器。具体思路为:

  1. 从标准输入读取一个整数 n,表示随后要进行操作的次数;
  2. 创建一个空的双向链表 l;
  3. 循环进行 n 次操作,每次从标准输入读取一个字符串 s;
  4. 如果 s 为 "in",则从标准输入读取一个字符串 name,并将其添加到链表 l 的尾部;
  5. 如果 s 为 "out",则弹出链表 l 的头部元素;
  6. 如果 s 为 "q",则输出链表 l 的头部元素(如果为空则输出 "NULL");
  7. 循环结束后程序运行结束。

代码

以使用链表为例:

#include <math.h>
#include <algorithm>
#include <string>
#include <vector>
#include <iomanip>
#include <iostream>
#include <cstring>
#include <list> // 包含 list 头文件

using namespace std;

int main() {
    int n; // 操作次数
    string s, name; // s表示操作类型,name表示要插入的名字

    cin >> n;

    list<string> l; // 创建一个空链表

    while(n--) { // 循环进行n次操作
        cin >> s; 

        if(s == "in") { // 如果是插入操作
            cin >> name;
            l.push_back(name); // 在链表尾部插入元素
        } else if(s == "out") { // 如果是弹出操作
            l.pop_front(); // 弹出链表头部元素
        } else if(s == "q") { // 如果是查询操作
            if(l.empty()) { // 如果链表为空
                cout << "NULL" << endl; 
            } else { // 否则输出链表头部元素
                cout << l.front() << endl;
            }
        }
    }

    return 0;
}

总结

需要注意的是:

  • 双向链表头文件应该包含 <list>
  • 注意使用 push_back() 和 pop_front() 两个函数实现在队列尾部插入元素和在队列头部弹出元素;
  • 使用 front() 函数可以访问双向链表的头部元素;
  • 当链表为空时,应该输出 "NULL";

我是秋说,我们下次见。

标签:输出,NULL,name,队列,排队,C++,链表,PTA,include
From: https://www.cnblogs.com/qiushuo/p/17481441.html

相关文章

  • 从C++mutex到futex
    从std::mutex到futex机制我原本出发点是C++std::mutex的实现原理,但是经过一番查阅,发现C++std::mutex是对glibc-nptl库pthread_mutex的封装;而nptl库在用户态完成了futex机制的一部分;最后在以linux为内核的操作系统中,又提供了futex系统调用给glibc-nptl给与底层支撑。因此本文先......
  • C++ 中 Concept-Model 概念模型
    此文档参考自:https://gracicot.github.io/conceptmodel/2017/09/13/concept-model-part1.html,觉得很有趣,就翻译过来了一、Concept-Model:多态的新视角面向对象编程大家都很熟悉,只需实现一个接口Interface。但这种使用经典OOP实现的多态性是侵入性的,即使在真正不需要的地方......
  • C/C++C语言课程设计[2023-06-14]
    C/C++C语言课程设计[2023-06-14]C语言课程设计要求1、每位同学按照指定的题目完成C语言课程设计,题目不能更换,每人1题,独立完成。上课时间同学们进入学习通课程(C语言课程设计)里签到,老师会有讲解检查。2、考核要求成绩组成考核/评价环节分值(或百分比)考核/评价细则平时成绩考勤、......
  • [C++/PTA] 计算正方体、圆柱体的表面积、体积
    题目要求从立方体、圆柱体抽象出一个公共基类Container,定义抽象类Container,模拟实现一个容器类层次结构,在主函数进行多态机制测试。各派生类要求实现基类的所有纯虚函数。抽象类classContainer{protected:staticdoublepi;public:virtualdoublearea()=0;//纯虚函数,计......
  • [C++/PTA] 抽象类Shape
    题目要求请编写一个抽象类Shape,包括两个纯虚函数,分别为计算面积getArea()和计算周长getPerim()。通过Shape类派生出矩形类Rectangle和圆类Circle,并计算各自的面积和周长。测试用例具体要求:输入1表示测试矩形类,之后输入矩形长和宽。输入2表示测试圆类,之后输入圆半径。Shape类定......
  • [C++/PTA] 计算点到直线的距离一一友元函数的应用
    题目要求计算点到直线的距离。首先设计一个点类Point,它有2个私有数据成员x和y,表示点的坐标。另一个类为直线类Line,它有3个私有数据成员a,b和c,表示直线方程ax+by+c=0。这两个类中都说明了一个友元函数dist,用于计算一个点到直线的距离。点(x.y)到直线ax+by+c=0的距离d的计算......
  • [C++/PTA] 队列操作
    题目要求请实现一个MyQueue类,实现出队,入队,求队列长度.实现入队函数voidpush(intx);实现出队函数intpop();实现求队列长度函数intsize();输入格式:每个输入包含1个测试用例。每个测试用例第一行给出一个正整数n(n<=10^6),接下去n行每行一个数字,表示一种操作:1x:......
  • [C++/PTA] 表彰优秀学生(多态)
    题目要求学期结束,班主任决定表彰一批学生,已知该班学生数在6至50人之间,有三类学生:普通生,特招运动员,学科专长生,其中学科专长生不超过5人。主函数根据输入的信息,相应建立GroupA,GroupB,GroupC类对象。GroupA类是普通生,有2门课程的成绩(均为不超过100的非负整数);GroupB类是特招运......
  • [C++/PTA] 2017Final进位与借位
    题目要求凤湖小学二年级的陈老师吃惊地发现班上的同学竟然可以分成三类,一类总是可以正确地完成三位整数加减法(GroupA);一类总是可以正确地完成三位整数的加法,但对于减法运算来说,总是忘记借位的处理(GroupB);剩下的人总是忘记加法的进位,也总是忘记减法的借位(GroupC)。现在请给出......
  • [C++] 什么是vertor容器?
    基本概念C++中的vector是一种顺序容器,是一个封装了动态大小数组的顺序容器,可以存放任意类型的数据。vector可以随着元素的加入自动扩充其大小,并且支持在中间插入或删除元素。vector的声明方式为:vector<元素类型>数组名;例如,声明一个储存整数的vector变量可以这样写:......