【蓝桥】队列操作

题目

题目描述

根据输入的操作命令,操作队列:1 入队、2 出队并输出、3 计算队中元素个数并输出。1≤N≤50。

输入描述

第一行一个数字 N。 接下来 N 行,每行第一个数字为操作命令:1入队、2 出队并输出、3 计算队中元素个数并输出。

输出描述

若干行每行显示一个 2 或 3 命令的输出结果。注意:2.出队命令可能会出现空队出队(下溢),请输出“no”,并退出。

输入输出样例

示例

输入

1
2
3
4
5
6
7
8
7
1 19
1 56
2
3
2
3
2

输出

1
2
3
4
5
19
1
56
0
no

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

解题

源码

C++

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
32
33
34
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> q;
int num, op, temp;
cin >> num;
while (num > 0)
{
num--;
cin >> op;
if (op == 1)
{
cin >> temp;
q.push(temp);
}
if (op == 2)
{
if (q.empty())
{
cout << "no";
continue;
}
cout << q.front() << endl;
q.pop();
}
if (op == 3)
{
cout << q.size() << endl;
}
}
return 0;
}

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#Queue版本
from queue import *

q = Queue()
n = eval(input())
for i in range(n):
s = list(map(int,input().split()))
if s[0] == 1:
q.put(s[1])
elif s[0] == 2:
if not q.empty():
a = q.get()
print(a)
else:
print('no')
break
elif s[0] == 3:
print(q.qsize())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#list版本
n = eval(input())
q = []
for i in range(n):
s = list(map(int,input().split()))
if s[0] == 1:
q.append(s[1])
elif s[0] == 2:
if len(q) > 0:
q.reverse()
a = q.pop()
print(a)
q.reverse()
else:
print('no')
break
elif s[0] == 3:
print(len(q))

总结

C++版

  1. 太简单不解释,只要掌握了容器的用法就出不了错
1
2
3
4
5
6
7
8
//STL中的queue容器
queue<Type> q; //定义队列,Type为数据类型,如int,float,char等
q. push(item); //把item放进队列
q.front();   //返回队首元素,但不会删除
q.pop(); //删除队首元素
q.back(); //返回队尾元素
q.size();     //返回元素个数
q.empty();   //检查队列是否为空
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
32
33
//常规手写队列模板以及原子操作
#define MAXQSIZE 100003 //自定义队列大小
struct myqueue{
int data[MAXQSIZE]; //分配静态空间
int head; //队头,指向队头的元素
int rear; //队尾,指向下一个可以放元素的空位置
bool init(){ //初始化
head = rear = 0;
return true;
}
int size(){ //返回队列长度
return (rear - head + MAXQSIZE) % MAXQSIZE; //防止出现负数
}
bool empty(){ //判断队列是否为空
if(size()==0) return true;
else return false;
}
bool push(int e){ //队尾插入新元素。新的rear指向下一个空的位置
if((rear + 1) % MAXQSIZE == head ) return false; //队列满
data[rear] = e;
rear = (rear + 1) % MAXQSIZE;
return true;
}
bool pop(int &e){ //删除队头元素,并返回它
if(head == rear) return false; //队列空
e = data[head];
head = (head + 1) % MAXQSIZE;
return true;
}
int front(){ //返回队首,但是不删除
return data[head];
}
};

Python版

  1. 太简单不做过多解释
  2. 唯一要注意的就是list版本op=2的时候要做两次reverse