优先级队列实现的两种方法(python实现)

前言

优先级队列底层使用的是堆结构,如果升序排列就对应小顶堆,降序排列对应大顶堆。

heapq模块

主要操作:

  1. heapify(),指定操作对象
  2. heappop()删除队首元素,并返回该元素
  3. heappush()添加一个元素
  4. merge()合并多个列表,使用key作为排序手段
import heapq as hq
end=[]
hq.heapify(end)
hq.heappush(end,2)
hq.heappush(end,3)
hq.heappush(end,1)
while len(end)!=0:
    print(hq.heappop(end),end=' ')

如果想要设置优先级可以使用元组(),在第一个位置写入数字来指定优先级,其原理就是优先级队列排序是从前向后比较,并使用升序排列.

指定优先级:

import heapq as hq
end=[]
hq.heapify(end)
hq.heappush(end,(3,[3,2]))
hq.heappush(end,(2,[2,3]))
hq.heappush(end,(1,[1,3]))
while len(end)!=0:
    print(hq.heappop(end)[1])#只要数据

优先级队列实现的两种方法(python实现)_第1张图片
降序排列:

import heapq as hq
end=[]
hq.heapify(end)
res=[1,3,2,4,8,5,6]
for i in range(0,len(res)):
    hq.heappush(end,(-res[i],res[i]))
while len(end)!=0:
    print(hq.heappop(end)[1],end=' ')

在这里插入图片描述
merge操作

import heapq as hq
res=list(hq.merge([12,3,4,2],[1,2,9,2],[90]))
print(res)

优先级队列实现的两种方法(python实现)_第2张图片
补充:可通过len(原列表)得到队列元素个数

queue模块

总体实现方法和heapq类似

  1. put()放入元素
  2. get()删除队首元素并返回该元素
  3. qsize()获取当前队列中元素个数
import queue
p=queue.PriorityQueue()
p.put(1)
p.put(3)
p.put(2)
print(p.qsize())
for i in range(0,3):
    print(p.get(),end=' ')
print()
print(p.qsize())

优先级队列实现的两种方法(python实现)_第3张图片
倒叙排列,自定义优先级都与heapq类似,这里不多赘述。

你可能感兴趣的:(python,heapq,queue,PriorityQueue)