Python递归实现优先队列数据结构

2023-04-16 00:00:00 队列 递归 数据结构

优先队列是一种特殊的队列,根据每个元素的优先级来确定出队顺序,具有优先级高的元素先出队的特点。常用的实现方式是使用堆(最小堆或最大堆),但我们也可以使用递归实现优先队列。

具体实现思路如下:

  1. 定义一个类,用于存储元素和其优先级信息。
  2. 定义一个空列表,用于存储所有元素。
  3. 定义一个递归函数,用于将新元素插入到列表中,并保持列表按照优先级排序。
  4. 定义一个出队函数,用于弹出优先级最高的元素。

以下是实现代码:

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

    def insert(self, item, priority):
        self.elements.append((item, priority))
        self._sort()

    def _sort(self):
        self.elements = sorted(self.elements, key=lambda x: x[1], reverse=True)

    def pop(self):
        return self.elements.pop(0)[0]

以上代码中,我们通过元素和优先级组成一个元组,将其作为一个整体存储在列表中。在插入新元素时,将其与优先级一起存储,并调用 _sort 函数,按照优先级排序所有元素。在弹出优先级最高的元素时,直接弹出第一个元素即可。

示例代码:

q = PriorityQueue()

q.insert("pidancode.com", 1)
q.insert("hello", 3)
q.insert("world", 2)

print(q.pop())
print(q.pop())
print(q.pop())

输出:

hello
world
pidancode.com

以上代码中,我们创建了一个优先队列 q,并分别插入三个元素。由于 hello 的优先级最高,因此第一次弹出的是它。接着,由于 world 的优先级次高,因此第二次弹出的是它。最后,由于 pidancode.com 的优先级最低,因此最后弹出的是它。

相关文章