队列的实现方式(先进先出 FIFO)--环形队列

队列,实现,方式,先进先出,fifo,环形 · 浏览次数 : 3

小编点评

**博客文章内容** 博客文章介绍了 Python 中队列的数据结构,包括 `Queue` 类。 **`Queue` 类** `Queue` 类是一个用于存储并管理队列的类。它包含以下属性: * `queue`: 一维列表,存储队列元素。 * `size`:队列大小。 * `rear`: 用于指向队列末端的指针。 * `front`: 用于指向队列开头指针。 **`push` 方法** `push` 方法将元素添加到队列的末尾。如果队列已满,它会引发 `IndexError` 错误。 **`pop` 方法** `pop` 方法从队列中删除并返回元素。如果队列为空,它会引发 `IndexError` 错误。 **`is_empty` 方法** `is_empty` 方法检查队列是否为空。 **`is_filled` 方法** `is_filled` 方法检查队列是否已满。 **示例** ```python # 创建一个大小为 5 的队列 q = Queue(5) # 将元素压入队列 q.push(0) q.push(1) q.push(2) q.push(3) # 打印队列元素 print(q.pop()) # 输出 0 print(q.is_filled()) # 输出 False # 将元素压入队列 q.push(4) # 打印队列元素 print(q.pop()) # 输出 4 print(q.is_filled()) # 输出 False ``` **总结** `Queue` 类是一个用于存储和管理队列的简单数据结构。它提供了一些操作,可以方便地添加、删除和检查队列中的元素。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

# -*- coding: utf-8 -*-

class Queue:
    def __init__(self, size=100):
        self.queue = [0 for _ in range(size)]
        self.size = size
        self.rear = 0  # 队尾指针
        self.front = 0  # 队首指针

    def push(self, element):
        if not self.is_filled():
            self.rear = (self.rear + 1) % self.size
            self.queue[self.rear] = element
        else:
            raise IndexError("Queue is filled.")

    def pop(self):
        if not self.is_empty():
            self.front = (self.front + 1) % self.size
            return self.queue[self.front]
        else:
            raise IndexError("Queue is empty.")

    # 判断队空
    def is_empty(self):
        return self.rear == self.front

    # 判断队满
    def is_filled(self):
        return (self.rear + 1) % self.size == self.front


q = Queue(5)
for i in range(4):
    q.push(i)
print(q.pop())
print(q.is_filled())
q.push(4)
print(q.is_filled())

与队列的实现方式(先进先出 FIFO)--环形队列相似的内容:

队列的实现方式(先进先出 FIFO)--环形队列

博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- class Queue: def __init__(self, size=100): self.queue = [0 for _ in range(size)] self.s

一种异步延迟队列的实现方式

目前系统中有很多需要用到延时处理的功能:支付超时取消、排队超时、短信、微信等提醒延迟发送、token刷新、会员卡过期等等。通过延时处理,极大的节省系统的资源,不必轮询数据库处理任务。 目前大部分功能通过定时任务完成,定时任务还分使用quartz及xxljob两种类型轮询时间短,每秒执行一次,对数据库造成一定的压力,并且会有1秒的误差。轮询时间久,如30分钟一次,03:01插入一条数据,正常3:3

低代码与消息队列的完美融合:打造高效开发与通信的组合

引言 消息队列(Message Queue,MQ)是一种在分布式系统中实现应用程序间通信的中间件技术。它的核心作用在于通过异步处理的方式,使得发送消息的应用程序(生产者)与接收消息的应用程序(消费者)解耦,从而提升系统的伸缩性、可靠性以及性能。 在消息队列中,生产者将需要处理的任务封装成消息发送至消

【RocketMQ】顺序消息实现总结

全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用。 局部有序 假设一个Topic分配了两个消息队列,生产者在发送消息的时候,可以对消息设置一个路由I

【RocketMQ】【源码】顺序消息实现原理

**全局有序** 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用。 ![](https://img2022.cnblogs.com/blog/2612945

MQ消息队列篇:三大MQ产品的必备面试种子题

MQ(Message Queue)作为一种用于实现异步通信的技术,具有重要的作用和应用场景。在面试过程中,MQ相关的问题经常被问到,因此了解MQ的用途和设计原则是必不可少的。本文总结了MQ的常见面试题,包括MQ的作用、产品选型、消息不丢失的保证、消息消费的幂等性、消息顺序的保证、消息的高效读写、分布式事务的最终一致性等方面。通过深入理解这些问题,可以更好地理解MQ的应用和设计,为面试和实际应用提供参考。

RabbitMQ保姆级教程最佳实践

一、消息队列介绍 1、消息队列概念 1、MQ全称为Message Queue,消息队列(MQ)是⼀种应⽤程序对应⽤程序的通信⽅法。 应⽤程序通过读写出⼊队列的消息(针对应⽤程序的数据)来通信,⽽⽆需专⽤连接来 链接它们。 2、消息传递指的是程序之间通过在消息中发送数据进⾏通信,⽽不是通过直接调⽤彼此

上周热点回顾(6.3-6.9)

热点随笔: · C#开源实用的工具类库,集成超过1000多种扩展方法 (追逐时光者)· RabbitMQ 进阶使用之延迟队列 → 订单在30分钟之内未支付则自动取消 (青石路)· .Net 中间件 - 新开源代码生成器 -ReZero (阿妮亚)· C#.Net筑基-String字符串超全总结 [深

[转帖]从理论到实践,异步I/O模式下NVMe SSD高性能之道

在早期NVMe的讨论话题中,常常将之AHCI协议进行对比,在支持的最大队列深度、并发进程数以及消耗时钟周期数等方面,NVMe吊打了AHCI。最直观也最权威的就是下面这张对比图片。 NVMe与AHCI协议对比(来源:sata-io.org) SATA的发展最早可以追溯到上世纪80年代的IDE/ATA,

说说RabbitMQ延迟队列实现原理?

使用 RabbitMQ 和 RocketMQ 的人是幸运的,因为这两个 MQ 自身提供了延迟队列的实现,不像用 Kafka 的同学那么苦逼,还要自己实现延迟队列。当然,这都是题外话,今天咱们重点来聊聊 RabbitMQ 延迟队列的实现原理,以及 RabbitMQ 实现延迟队列的优缺点有哪些? 很多人