利用数组实现优先级队列

作者:渣渣辉2024.02.17 03:12浏览量:13

简介:优先级队列是一种数据结构,其中元素具有优先级,优先级最高的元素最先出队。下面是一个简单的示例,演示如何使用数组实现优先级队列。

在实现优先级队列时,常用的数据结构有堆和斐波那契堆。但由于题目要求使用数组实现,我们将采用一种基于数组的简单实现方法。

首先,定义一个数组来存储元素,并使用一个额外的数组来存储每个元素的优先级。然后,根据优先级数组中的值来重新排列原数组,使得优先级最高的元素位于数组的开头。

以下是一个示例代码:

  1. class PriorityQueue:
  2. def __init__(self):
  3. self.array = []
  4. self.priority = []
  5. def insert(self, item, priority):
  6. self.array.append(item)
  7. self.priority.append(priority)
  8. self.sort()
  9. def remove_max(self):
  10. if not self.array:
  11. return None
  12. max_index = 0
  13. for i in range(1, len(self.array)):
  14. if self.priority[i] > self.priority[max_index]:
  15. max_index = i
  16. max_item = self.array[max_index]
  17. self.array = self.array[:max_index] + self.array[max_index + 1:]
  18. self.priority = self.priority[:max_index] + self.priority[max_index + 1:]
  19. return max_item
  20. def sort(self):
  21. while True:
  22. swapped = False
  23. for i in range(1, len(self.array)):
  24. if self.priority[i - 1] < self.priority[i]:
  25. self.array[i - 1], self.array[i] = self.array[i], self.array[i - 1]
  26. self.priority[i - 1], self.priority[i] = self.priority[i], self.priority[i - 1]
  27. swapped = True
  28. if not swapped:
  29. break

使用示例:

```python
pq = PriorityQueue()
pq.insert(‘item1’, 3)
pq.insert(‘item2’, 1)
pq.insert(‘item3’, 2)
print(pq.remove_max()) # 输出:’item2’(优先级最高)
print(pq.remove_max()) # 输出:’item3’(优先级次高)
print(pq.remove_max()) # 输出:’item1’(优先级最低)