队列特点:先进先出(头离尾进)
循环队列
- Queue:
from queue import * n = 10 q = Queue() for i in range(n): q.put(i) # q.put() 从队尾插入 print(q.qsize()) # q.size() 队列大小 print(q.empty()) # q.empty() 队列是否为空 for i in range(n): a = q.get() # q.get() 从队头删除,并返回 print(a, end=' ') print() print(q.qsize()) # 队列大小 print(q.empty()) # 队列是否为空 '''输出结果 10 False 0 1 2 3 4 5 6 7 8 9 0 True'''
- list:
n = 10 q = [] for i in range(n): q.append(i) print(q) print(len(q)) for i in range(n): print(q[0], end=' ') del q[0] print() print(len(q)) if not q: print('empty') '''输出结果 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 10 0 1 2 3 4 5 6 7 8 9 0 empty'''
- deque:双端队列,效率十分高
from collections import * n = 10 q = deque() for i in range(n): q.append(i) # 入队,从队列右端(队尾)插入 # q.appendleft 入队,从队列左端(队头)插入 print(len(q)) # 队列大小 if q: # 判断是否空 print('not empty') for i in range(n): a = q.popleft() # 出队,从队列左端(队头)删除一个元素,并返回该元素 # pop 出队,从队列右端(队尾)删除一个元素,并返回该元素 print(a, end=' ') print() print(len(q)) if not q: print('empty') '''输出结果 10 not empty 0 1 2 3 4 5 6 7 8 9 0 empty'''
优先队列PriorityQuene(可参考二叉堆)
import queue
pq = queue.PriorityQueue() # 定义
pq.put([priority, value]) # 进队列
# put()的第一个参数priority表示数据的优先级,第二个参数value是值
# 如果只有一个参数,同时表示优先级和值。值越小优先级越高,队首总是最小值
pq.get() # 取出队首
pq.empty() # 判断空
pq.qsize() # 队列大小