数据结构与算法之数据结构 队列 循环队列 / 优先队列 操作实践

数据结构与算法阿木 发布于 2025-07-11 7 次阅读


摘要:

队列是一种先进先出(FIFO)的数据结构,广泛应用于各种场景中。本文将围绕队列这一主题,分别介绍循环队列和优先队列的原理,并通过代码实现展示这两种队列的操作实践。

一、

队列是一种先进先出(FIFO)的数据结构,它允许在队列的前端进行插入操作(入队),在队列的后端进行删除操作(出队)。在实际应用中,队列可以用来模拟各种场景,如任务调度、打印队列、消息队列等。本文将重点介绍循环队列和优先队列的原理,并通过代码实现展示这两种队列的操作。

二、循环队列

循环队列是一种使用固定大小的数组实现的队列,它通过循环利用数组空间来避免数组溢出。以下是循环队列的基本操作:

1. 初始化队列

2. 入队操作

3. 出队操作

4. 判断队列是否为空

5. 判断队列是否已满

下面是循环队列的Python代码实现:

python

class CircularQueue:


def __init__(self, capacity):


self.capacity = capacity


self.queue = [None] capacity


self.front = self.rear = -1

def is_empty(self):


return self.front == -1

def is_full(self):


return (self.rear + 1) % self.capacity == self.front

def enqueue(self, item):


if self.is_full():


print("Queue is full")


return


elif self.is_empty():


self.front = self.rear = 0


else:


self.rear = (self.rear + 1) % self.capacity


self.queue[self.rear] = item

def dequeue(self):


if self.is_empty():


print("Queue is empty")


return None


else:


item = self.queue[self.front]


if self.front == self.rear:


self.front = self.rear = -1


else:


self.front = (self.front + 1) % self.capacity


return item

def display(self):


if self.is_empty():


print("Queue is empty")


return


i = self.front


while True:


print(self.queue[i], end=" ")


if i == self.rear:


break


i = (i + 1) % self.capacity


print()


三、优先队列

优先队列是一种特殊的队列,它根据元素的优先级来决定元素的出队顺序。在Python中,可以使用内置的`heapq`模块来实现优先队列。以下是优先队列的基本操作:

1. 初始化优先队列

2. 插入元素

3. 获取最高优先级元素

4. 删除最高优先级元素

下面是优先队列的Python代码实现:

python

import heapq

class PriorityQueue:


def __init__(self):


self.queue = []


self.index = 0

def insert(self, item, priority):


heapq.heappush(self.queue, (-priority, self.index, item))


self.index += 1

def get_highest_priority(self):


if self.queue:


return self.queue[0][2]


return None

def remove_highest_priority(self):


if self.queue:


return heapq.heappop(self.queue)[2]


return None

def display(self):


for item in self.queue:


print(f"Item: {item[2]}, Priority: {-item[0]}")


四、总结

本文介绍了循环队列和优先队列的原理,并通过Python代码实现了这两种队列的基本操作。循环队列通过循环利用数组空间来避免数组溢出,而优先队列则根据元素的优先级来决定元素的出队顺序。在实际应用中,这两种队列可以用来解决各种问题,如任务调度、资源分配等。

通过本文的学习,读者可以了解到队列的基本概念和操作,并能够根据实际需求选择合适的队列实现。在实际开发过程中,合理运用队列可以提高程序的效率和可读性。