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

相关推荐
程序员敲代码吗4 分钟前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
EndingCoder7 分钟前
案例研究:从 JavaScript 迁移到 TypeScript
开发语言·前端·javascript·性能优化·typescript
Yyyyy123jsjs7 分钟前
如何通过免费的外汇API轻松获取实时汇率数据
开发语言·python
白露与泡影15 分钟前
2026版Java架构师面试题及答案整理汇总
java·开发语言
喵手16 分钟前
Python爬虫实战:GovDataMiner —— 开放数据门户数据集元数据采集器(附 CSV 导出)!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·open data·开放数据门户数据集列表
历程里程碑29 分钟前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
一个天蝎座 白勺 程序猿1 小时前
KingbaseES查询逻辑优化深度解析:从子查询到语义优化的全链路实践
开发语言·数据库·kingbasees·金仓数据库
人工智能AI技术1 小时前
【Agent从入门到实践】43 接口封装:将Agent封装为API服务,供其他系统调用
人工智能·python
skywalker_112 小时前
Java中异常
java·开发语言·异常
2501_940315262 小时前
航电oj:首字母变大写
开发语言·c++·算法