Python实现优先级队列

时间:2013-11-02 18:11:24

标签: python priority-queue

我试图在不使用Queue模块的情况下建立优先级队列。我已经创建了一个类PriorityQueue(),我正在尝试创建一个不带参数的mk函数,并返回一个空队列,但似乎无法弄清楚如何。我的任务功能在这里:

class Task():

    __slots__ = ('name', priority)

def mkTask(myName, myPriority):
    t = Task()
    t.name = myName
    t.priority = myPriority
    return t

到目前为止,我的PriorityQueue类以及检查队列是否为空的函数是:

class PriorityQueue():
    def __init__(queue):
        queue.length = 0
        queue.first = None
        queue.last = None

def is_empty(queue):
    return(queue.length == 0)

我似乎无法弄清楚如何创建队列的实例并将特定任务的元素插入队列。

1 个答案:

答案 0 :(得分:0)

优先级队列通常使用堆来实现,这里是这样的实现。注意,Python中的堆实现返回堆中最小的东西,所以我否定了优先级,以便首先弹出最高优先级的东西。

import heapq

class PriorityQueue:
    def __init__(self):
        self.items = []

    def push(self, priority, x):
        heapq.heappush(self.items, (-priority, x))

    def pop(self):
        _, x = heapq.heappop(self.items)
        return x

    def empty(self):
        return not self.items