top1编程
← 返回题目
题解

队列的操作

1 条题解

  • 0
    @ 2026-8-6 2:22:20

    P4848 队列的操作(入门)

    解题思路

    **第一步,认识队列。**队列就像食堂打饭的队伍:新来的人排在队尾(入队),轮到的人从队头离开(出队),也就是“先进先出”。我们用数组q来模拟,用h记录队头位置,用t记录队尾位置。

    **第二步,把5个整数入队。**题目输入5个整数,我们就按顺序把它们一个一个放进队列:每放一个,t就往后移动一格。这样5个数字就整整齐齐排在队伍里。

    **第三步,做3次出队操作。**每次出队,就把队头的数字取出来输出,h往后移动一格。做3次,第一行就输出了3个按出队顺序排列的数字,它们之间用空格隔开。

    **第四步,输出剩下的队首。**出队3次之后,队伍里还剩2个数字,队头就是原来第4个入队的数字。把它输出在第二行,题目就完成了。

    **举例子验证。**输入 4 9 12 6 7:入队后队伍是 4、9、12、6、7;出队3次,依次是4、9、12,第一行输出“4 9 12”;剩下的队首是6,第二行输出“6”,和样例一致。

    参考代码

    // P4848 队列的操作:5个整数入队,出队3次,再输出队首
    #include <iostream>
    #include <cstdio>
    using namespace std;
    int q[10];
    int h, t;
    int main() {
        for (int i = 0; i < 5; i++) {
            int num;
            scanf("%d", &num);
            q[t++] = num;  // 入队
        }
        for (int i = 0; i < 3; i++) {  // 三次出队
            if (i) printf(" ");
            printf("%d", q[h++]);
        }
        printf("\n%d\n", q[h]);  // 出队后的队首
        return 0;
    }
    

    复杂度分析

    入队5个数、出队3个数,每一步都是O(1),所以总时间是O(1),也就是常数时间,秒出结果。空间上只需要一个很小的数组存下这几个数,完全可以忽略。这道题是队列最基础的练习。

    • 1