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

本文介绍了Python中实现优先级队列的方法,通过heapq模块创建和操作小顶堆,演示了heappush、heappop等函数的使用,并展示了如何设置优先级和实现降序排列。同时,讲解了queue模块的PriorityQueue类,用于入队、出队及获取队列大小的操作,同样支持自定义优先级。示例代码详实,便于理解。
摘要由CSDN通过智能技术生成

前言

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

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])#只要数据

在这里插入图片描述
降序排列:

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)

在这里插入图片描述
补充:可通过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())

在这里插入图片描述
倒叙排列,自定义优先级都与heapq类似,这里不多赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看不见的罗辑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值