学习笔记-优先队列(Python实现)

优先队列总是会弹出当前元素中优先级最高的当插入元素时,将其插入到满足当前优先级顺序的位置。 优先队列是一种重要的缓存结构。

当用列表来实现优先队列时,可以考虑利用元素在列表中的先后顺序来表示优先级关系。为了在O(1)时间内弹出优先级最高的元素,所以应该将优先级最高的元素放在列表的表尾

在以下的实现中,值较小的元素具有更高的优先级。

class ListPriQueueValueError(ValueError):
    pass


class Pri_Queue(object):
    def __init__(self, elems=[]):
        self._elems = list(elems)
        self._elems.sort(reverse=True)

    def is_empty(self):
        return self._elems is []

    def peek(self):
        if self.is_empty():
            raise ListPriQueueValueError("in pop")
        return self._elems[-1]

    def dequeue(self):
        if self.is_empty():
            raise ListPriQueueValueError("in pop")
        return self._elems.pop()

    def enqueue(self, e):
        i = len(self._elems) - 1
        while i >= 0:
            if self._elems[i] < e:
                i -= 1
            else:
                break
        self._elems.insert(i + 1, e)


if __name__ == "__main__":
    temp = Pri_Queue(['a', 'b', 'g', 'd'])
    temp.enqueue('f')
    print(temp._elems)
    print(temp.peek())
    temp.dequeue()
    print(temp._elems)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值