优先队列,有别于普通队列的先入先出(虽然字面上还是队列,但其实无论从含义还是实现上,和普通队列都有很大的区别),也有别于栈的先入后出。在实现上,它一般通过堆这一数据结构,而堆其实是一种完全二叉树,它会对进入容器的元素进行排序(根据事先指定的规则),出队的顺序则会是二叉树的根结点代表的元素。
1. 接口介绍
import Queue
class ComparableObj: # 可比较对象,放入优先队列中
def __init__(self, **):
...
def __cmp__(self, other): # 比较规则的指定,谁做根(大顶堆,小顶堆)
# 返回的是布尔类型
...
return True/Flase
...
que = Queue.PriorityQueue()
que.put(ComparableObj(**))
que.put(ComparableObj(**))
...
que.qsize()
# 优先队列中元素的个数
que.get()
# 返回根(优先队列第一个出队的元素)