循环队列实现(python)

循环队列的关键在于两个指针:

一个是front(队首),指向队列的第一个元素;

另一个是rear(队尾),指向队列的最后一个元素的下一个位置。

在循环队列中,当rear指针到达数组的末尾时,它会跳回到数组的开头,形成一个循环。

python 复制代码
class CircularQueue:
    def __init__(self, capacity):
        self.capacity = capacity + 1  # 多出的一个空间用来判断队列是否已满
        self.queue = [None] * self.capacity
        self.front = 0  # 队首指针
        self.rear = 0  # 队尾指针

    def is_full(self):
        # 队列满的条件是队尾指针再前进一步就会和队首指针重合
        return (self.rear + 1) % self.capacity == self.front

    def is_empty(self):
        # 队列空的条件是队首和队尾指针相等
        return self.front == self.rear

    def enqueue(self, item):
        # 入队操作
        if self.is_full():
            raise Exception("Queue is full")
        self.queue[self.rear] = item
        self.rear = (self.rear + 1) % self.capacity  # 循环移动

    def dequeue(self):
        # 出队操作
        if self.is_empty():
            raise Exception("Queue is empty")
        item = self.queue[self.front]
        self.queue[self.front] = None  # 可选操作,清除引用
        self.front = (self.front + 1) % self.capacity  # 循环移动
        return item

    def peek(self):
        # 查看队首元素
        if self.is_empty():
            raise Exception("Queue is empty")
        return self.queue[self.front]

在这个实现中,使用了一个定长数组来存储队列元素,并通过模运算(% self.capacity)来确保指针在达到数组边界时能够循环移动到数组的开始位置。这样就实现了一个高效且节省空间的循环队列。

相关推荐
databook2 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar3 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780513 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_3 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机10 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机11 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机11 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机11 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i11 小时前
drf初步梳理
python·django
每日AI新事件11 小时前
python的异步函数
python