循环队列实现(python)

循环队列的关键在于两个指针:
一个是front(队首),指向队列的第一个元素;
另一个是rear(队尾),指向队列的最后一个元素的下一个位置。
在循环队列中,当rear指针到达数组的末尾时,它会跳回到数组的开头,形成一个循环。

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

相关推荐

  1. 循环队列实现python

    2024-04-05 06:30:04       42 阅读
  2. golang实现循环队列

    2024-04-05 06:30:04       38 阅读
  3. rust实现循环队列

    2024-04-05 06:30:04       36 阅读
  4. golang实现循环队列

    2024-04-05 06:30:04       29 阅读
  5. python实现多进程循环共享内存队列

    2024-04-05 06:30:04       34 阅读
  6. 数组实现循环队列(新增一个空间)

    2024-04-05 06:30:04       66 阅读
  7. 数组实现循环队列(增设队列大小size)

    2024-04-05 06:30:04       70 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 06:30:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 06:30:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 06:30:04       87 阅读
  4. Python语言-面向对象

    2024-04-05 06:30:04       96 阅读

热门阅读

  1. 我对神经网络的一点理解

    2024-04-05 06:30:04       30 阅读
  2. 蓝桥杯 2023 省 B 洛谷P9242 接龙数列

    2024-04-05 06:30:04       39 阅读
  3. 7-43 哲哲打游戏

    2024-04-05 06:30:04       34 阅读
  4. 探索STM32串口通讯:打开硬件通道的魔法之门

    2024-04-05 06:30:04       37 阅读
  5. kafka 消息防丢失/消息防重复设计分析

    2024-04-05 06:30:04       40 阅读
  6. Qt之Timers

    2024-04-05 06:30:04       39 阅读
  7. 技术应用:使用exp4j库解析数学表达式

    2024-04-05 06:30:04       37 阅读
  8. 设计模式面试题(二)

    2024-04-05 06:30:04       36 阅读
  9. Stable Diffusion 本地部署教程

    2024-04-05 06:30:04       31 阅读
  10. RabbitMQ在云原生环境中部署和应用实践

    2024-04-05 06:30:04       37 阅读
  11. 【云原生篇】k8s之Deployment详解

    2024-04-05 06:30:04       32 阅读
  12. Vue后台管理系统常用组件的优缺点分析

    2024-04-05 06:30:04       38 阅读