python 数据结构
队列
队列定义
队列是一种先进先出的数据结构,Queue是python标准库中线程安全的队列FIFO实现
队列基本操作
创建一个队列
Queue.Queue实现一个队列的创建,参数maxsize控制队列的长度,当maxsize<1,则队列无限长
import Queue
myqueue = Queue.Queue(maxsize=10)
向队列中插入数据
数据将插入队列尾部
from queue import Queue
q = Queue(2) #允许队列中最多包含两个数据
q.put(3)
q.put(4) #向队列中插入3和4
q.put(5, timeout=2) #此时队列长度已满,插入5时,由于设置了timeout
#2秒后会raise 一个 FULL的报错,否则会处于阻塞状态
取出队列中的数据
自队列头部取出数据
q.get() #取出队列头部的数据,即3
获取队列长度
q.qsize()
判断队列为空或满
q.empty() #若队列为空则返回True,否则返回False
join()与task_done()的区别
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作
双向队列
创建双向队列
from collentions import deque
dq = deque(maxlen=10) #maxlen定义双向队列可容纳元素数量,一旦设定无法更改
双向队列的旋转操作
dq.rotate(-2) #当n<0时,队列最**左**边的n个元素会被移动到队列**右**边 ,e.g.[1,2,3,4,5]--->[3,4,5,1,2]
dq.rotate(2) #当n>0时,队列最**右**边的n个元素会被移动到队列**左**边 ,e.g.[1,2,3,4,5]--->[5,4,1,2,3]
其他队列
Python提供的所有队列类型 :
FIFO 先进先出队列 queue.Queue(maxsize)
LIFO 后进先出队列 queue.LifoQueue(maxsize) (Queue的基础上进行的封装)
优先级队列 queue.PriorityQueue(maxsize) (Queue的基础上进行的封装)
双向队列 queue.deque