题解
队列的操作
1 条题解
-
0
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