题目描述
根据输入的操作命令,操作队列:1 入队、2 出队并输出、3 计算队中元素个数并输出。1≤N≤50。
输入描述
第一行一个数字 N。 接下来 N 行,每行第一个数字为操作命令:1入队、2 出队并输出、3 计算队中元素个数并输出。
输出描述
若干行每行显示一个 2 或 3 命令的输出结果。注意:2.出队命令可能会出现空队出队(下溢),请输出“no”,并退出。
输入输出样例
输入
7
1 19
1 56
2
3
2
3
2
输出
19
1
56
0
no
参考代码:
1、queue方法实现队列:
#用 queue 实现
from queue import * #导入库
q=Queue() #创建队列对象
n=eval(input()) #eval() 函数用来执行一个字符串表达式,并返回表达式的值。
for i in range(n):
s=list(map(int,input().split())) #读入每行数据,存放在列表s内
if s[0]==1: #判断命令:入队
q.put(s[1])
elif s[0]==2: #判断命令:出队并输出
if not q.empty(): #判断队列是否为空
a=q.get() #队头删除并输出
print(a)
else:
print('no') #为空则输出 no
break
elif s[0]==3: #判断命令:计算元素个数输出
print(q.qsize())
2、deque方法实现队列:
from collections import * #导入库
n=eval(input())
q=deque()
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:
a=q.popleft() #出队,从队头删除一个元素,并返回该元素
print(a)
else:
print('no')
break
elif s[0]==3:
print(len(q))
3、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() #pop()默认弹出列表中最后一个元素,弹出之后,原列表中该元素删除
print(a)
q.reverse() #还原
else:
print('no')
break
elif s[0]==3:
print(len(q))
Queue操作:
q.put (),从队尾插入
q.get(),从队头删除,并返回
q.qsize(),队列大小
q.empty(),队列是否为空
deque操作:
append:入队,从队列右端(队尾)插入
appendleft:入队,从队列左端(队头)插入
pop:出队,从队尾删除一个元素并返回该元素
poplift:出队,从队头删除一个元素并返回该元素
len()队列大小
if q 判断空
list操作:
q.append(),从队尾插入
del q [0],删除队头
len(q)队列大小
if not q 队列为空
reverse() 函数用于反向列表中元素