循环队列实现(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)来确保指针在达到数组边界时能够循环移动到数组的开始位置。这样就实现了一个高效且节省空间的循环队列。

相关推荐
染指11103 小时前
152.Agent-LangGraph-Command的参数
人工智能·python·langchain·agents
第404号工位4 小时前
“已彻底删除”的照片与文件到底去哪了?我用底层扇区扫描,扒出手机和电脑的幽灵数据
linux·python·架构
智购科技自动售卖机厂家4 小时前
双摄像头方案F1-score只有0.85,排查发现是上下视角的融合逻辑写反了~YH
python·单片机·嵌入式硬件·算法·eclipse
田里的水稻4 小时前
FA_CNN卷积神经网络二---PyTorch
人工智能·pytorch·python·深度学习·cnn
code2cat4 小时前
Java高级篇之Socket:从建立连接到完整收发一条消息
java·开发语言
小肝一下4 小时前
1.大模型介绍
python·langchain·大模型·ollama·langgrap
xiangjiaodalishi4 小时前
从 0 到 1 搭建 AI 友好的网站结构:信息架构与 GEO 的交叉地带
人工智能·python
凯瑟琳.奥古斯特4 小时前
OCR文字检测算法对比解析
开发语言·python·职场和发展
Misnice4 小时前
Python 内置函数大全
开发语言·windows·python
美狐美颜SDK开放平台4 小时前
直播APP集成美颜SDK,如何梳理第三方组件的数据权限?
开发语言·人工智能·深度学习·音视频·第三方美颜sdk