優先隊列,有別於普通隊列的先入先出(雖然字面上還是隊列,但其實無論從含義還是實現上,和普通隊列都有很大的區別),也有別於棧的先入后出。在實現上,它一般通過堆這一數據結構,而堆其實是一種完全二叉樹,它會對進入容器的元素進行排序(根據事先指定的規則),出隊的順序則會是二叉樹的根結點代表的元素。
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()
# 返回根(優先隊列第一個出隊的元素)