• 卡码网语言基础课 | 排队取奶茶


    卡码网语言基础课 | 排队取奶茶

    队列

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

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

    队列的操作

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

    #include 
    
    • 1

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

    queue<string> que;
    
    • 1

    队列的常用操作又如下几种:

    • empty():判断队列是否为空,如果队列为空返回true,否则返回false
    • push():入队操作,将新的元素添加到队列的尾部
    • pop():出队操作,移除队列的头部元素
    • front():获取队列的头部元素,但不会将其移除
    • size():获取队列的长度,即队列中元素的数量
    q.push("Jack")
    q.push("Mike")
    
    q.pop(); // 弹出队列头部的元素,即"Jack"
    
    string name = que.front(); // 获取队列的头部元素,但不会将其移除
    
    bool isEmpty = que.empty() // 如果队列为空返回true,否则返回false
    
    int queueSize = qie.size(); // 获取队列的长度(元素数量)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    代码编写

    代码的基础结构:

    #include 
    #include 
    #include 
    using namespace std;
    
    int main() {
    	int n;
    	cin >> n;
    	string name;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    创建一个字符串队列,然后在 n 次循环中将这 n 个人的姓名推入到队列中

    queue<string> que;
    while (n--) {
    	cin >> name;
    	que.push(name);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    接收数字 m 和 m 个整数的输入,表示取奶茶的操作,如果数字为1,表示有人取走了奶茶(即出队操作);如果数字为2,表示有人新加入了奶茶(即入队操作)

    int opt;
    cin >> m;
    while (m--) {
    	cin >> opt;
    	if (opt == 1 && !que.empty()) {
    		que.pop();
    	} else {
    		cin >> name;
    		que.push(name);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如果队列为空,说明没有取奶茶的人,输出 “There are no more people in the queue…”

    if (que.empty()){
    	cout <<  “There are no more people in the queue..<< endl;
    } else {
    	cout << que.front() << endl;
    
    • 1
    • 2
    • 3
    • 4

    完整代码如下:

    #include 
    #include 
    #include 
    using namespace std;
    
    int main() {
        int n, m, opt;
        string name;
        cin >> n;
        queue<string> que;
        
        while (n--) {
            cin >> name;
            que.push(name);
        }
        
        cin >> m;
        
        while (m--) {
            cin >> opt;
            
            if (opt == 1 && !que.empty()) que.pop();
            else {
                cin >> name;
                que.push(name);
            }
        }
        
        if (que.empty()) cout <<  "There are no more people in the queue." << endl;
        else cout << que.front() << endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    Mysql.索引数据结构演进
    【踩坑系列】发送微信模板消息返回40165 invalid weapp pagepath
    Ant Vue Table 合并单元格
    Day726.Java平台模块系统 -Java8后最重要新特性
    Shell脚本数组
    el-cascader 最后一级不显示出来
    链表高阶面试题及二叉树的遍历【前、中、后、层】
    Win10 Mysql 8.0.26版本忘记密码后重新修改。
    速盾:cdn测试工具
    ATFX:非农就业报告来袭,美元指数或再迎剧烈波动
  • 原文地址:https://blog.csdn.net/jivvv/article/details/134464679