B3616 【模板】队列

B3616 【模板】队列 解题思路与代码注释

解题思路

队列是一种先进先出(FIFO)的数据结构,本题要求实现队列的四个基本操作:

  1. push(x) - 将元素x加入队列尾部

  2. pop() - 移除队列头部元素

  3. query() - 查询队列头部元素

  4. size() - 查询队列当前元素数量

有两种常见的实现方式:

  1. 数组模拟队列:使用数组和头尾指针(head/tail)手动管理队列

  2. STL队列:直接使用C++标准库中的queue容器

代码1注释:数组模拟队列

#include<bits/stdc++.h>
using namespace std;
int q[10001],head = 1,tail = 1; // 定义队列数组和头尾指针(初始都指向1)

int main()
{
    int n; cin >> n; // 读取操作次数
    while(n--)
    {
        int op; cin >> op; // 读取操作类型
        if(op == 1) // 入队操作 
        {
            int x; cin >> x; // 读取要入队的元素
            q[tail++] = x; // 将x放入tail位置,然后tail后移
        }
        if(op == 2) // 队首出队
        {
            if(head == tail){ // 队列为空(head等于tail)
                cout << "ERR_CANNOT_POP" << endl;
            }
            else{ // 队列不为空,头指针后移实现出队
                head++;
            }
        } 
        if(op == 3) // 查询队首
        {
            if(head == tail){ // 队列为空
                cout << "ERR_CANNOT_QUERY" << endl;
            }
            else{ // 输出头指针位置的元素
                cout << q[head] << endl;
            }
        } 
        if(op == 4) // 输出队列元素个数
        {
            cout << tail - head << endl; // 尾指针-头指针=元素个数
        }
    }
    return 0;
}

代码2注释:STL队列实现

#include<bits/stdc++.h>
using namespace std;
queue<int> q; // 直接使用STL的queue容器

int main()
{
    int n; cin >> n; // 读取操作次数
    while(n--)
    {
        int op; cin >> op; // 读取操作类型
        if(op == 1){ // 入队操作
            int x; cin >> x; // 读取要入队的元素
            q.push(x); // 使用queue的push方法
        }
        if(op == 2){ // 出队操作
            if(q.size()) q.pop(); // 队列不为空则弹出队首
            else cout << "ERR_CANNOT_POP" << endl; // 空队列报错
        }
        if(op == 3){ // 查询队首
            if(q.size()) cout << q.front() << endl; // 使用front()获取队首
            else cout << "ERR_CANNOT_QUERY" << endl; // 空队列报错
        }
        if(op == 4){ // 查询队列大小
            cout << q.size() << endl; // 使用size()方法
        }
    }
    return 0;
}

两种实现方式的比较

  1. 数组模拟队列:

    • 优点:实现原理清晰,有助于理解队列底层工作原理

    • 缺点:需要手动管理头尾指针,固定数组大小可能限制容量

  2. STL队列:

    • 优点:使用简单,无需关心底层实现,自动扩容

    • 缺点:隐藏了实现细节,不利于初学者理解队列原理

两种实现都能正确完成题目要求,STL版本代码更简洁,而数组版本更适合学习队列的实现原理。

posted @ 2025-05-27 15:50  CRt0729  阅读(50)  评论(0)    收藏  举报