c++语言基础20-排队取奶茶(堆)

题目描述

假设有一家奶茶店,现在有一些人在排队等待取奶茶,同时也有人在取奶茶。 请你设计一个程序模拟这种情况下的奶茶队列管理。

假设每个人取奶茶的时间非常短,可以忽略不计,只需要考虑队列中的操作。 

队列操作说明: 

1. 当操作为 1 时,表示有人已经取走奶茶,从队列中删除该人的信息。
2. 当操作为 2 时,表示有新人加入排队,将该人的信息加入队列。 

在一系列操作之后,你需要回答:下一个取奶茶的人是谁?

输入描述
第一行有一个整数 n,代表初始队列有 n 个人。 

第二行有 n 个字符串,代表当前奶茶队列中的人。 

第三行为一个整数 m,代表接下来将会有 m 次操作。 

接下来一共有 m 行,代表共有 m 次操作。 

如果是操作 1,那么该行只会有一个数字,代表有人取走了奶茶。
如果是操作 2,那么该行有一个数字和一个字符串,第一个数字 2 表示有人加入了奶茶队列,第二个字符串代表新加入的奶茶队列的人。

输出描述
输出只有一行,为下一个取奶茶的人。 如果已经没有去奶茶的人了,输出“There are no more people in the queue.”。
输入示例
5
Giselle Winter Aubree Wrenley Royalty
3
1
1
2 Andrew
输出示例
Aubree

队列

队列,顾名思义,和排队的队列结构是类似的,在排队的过程中,想要加入队列,需要在队伍的最后一位(也被称为队尾)入队,想要离开队列,需要从队伍的第一位(也被称为队头)出队。

从图中可以看出,队列在队尾那一侧进行插入操作(入队),在队头那一侧进行删除操作(出队),而且是先进先出FIFO(最先进入队列的元素将首先被移除)。

队列在计算机领域中应用也十分广泛,比如在网络通信中,请求和响应通常以队列的形式进行排队,以确保数据按照正确的顺序进行传输,又比如说不同进程可以通过消息队列来传递数据和消息。

队列的操作

在C++中,你可以使用标准库提供的 std::queue 来创建和操作队列,不过这需要引入头文件queue

// 引入queue头文件

#include <queue>
创建一个队列和创建一个栈的写法是相似的,需要指定队列中元素的类型,不过这也意味着队列中的元素必须是相同的数据类型,下面的代码表示创建一个字符串类型的队列。

queue<string> q; // 创建一个字符串类型的队列
队列的常用操作主要有以下几种:

empty(): 判断队列是否为空,如果队列为空返回true, 否则返回false
push(): 入队操作,将新的元素添加到队列的尾部。
pop(): 出队操作,移除队列的头部元素。
front(): 访问队列的头部元素,但不会将其移除。
size(): 获取队列的长度,即队列中元素的数量。
q.push("Jack");
q.push("Mike");  // 入队了两个名称字符串

q.pop(); // 移除队列头部的元素

string name = q.front(); // 获取队列头部的元素但是不会将其移除

bool isEmpty = q.empty(); //  如果队列为空,返回true;否则返回false

int queueSize = q.size(); // 获取队列中元素的数量

我的完整代码

#include <iostream>
#include <queue>
#include <string>

int main () {
    int n;
    std::cin >> n;
    std::queue<std::string> qs;
    std::string name;
    while (n--) {
        std::cin >> name;
        qs.push(name);
    }
    int m, k;
    std::cin >> m;
    while (m --) {
        std::cin >> k;
        if (k == 1 && !qs.empty()) {
            qs.pop();
        }
        else if (k == 2) {
            std::cin >> name;
            qs.push(name);
        }
    }
    if (!qs.empty()) {
        std::cout << qs.front() << std::endl;
    }
    else {
        std::cout << "There are no more people in the queue." << std::endl;
    }
    
}

总结来说,栈是只能在尾部进行插入和删除操作的数据结构,队列是在尾部进行插入操作、头部进行删除操作的数据结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值