首页 > 编程语言 >Python数据结构之队列

Python数据结构之队列

时间:2024-12-27 17:41:29浏览次数:5  
标签:Python 队首 self 环形 队列 front 数据结构 size

1、对列

队列(Queue) 是一种线性数据结构,遵循先进先出(FIFO)的原则。可以将队列想象成排队的场景,最先排队的人最先被服务。

2、队列的特点

先进先出(FIFO): 队列遵循先进先出的原则,第一个进入队列的元素最先被移除。
两个操作端: 队列在队尾插入元素,在队首移除元素,两个操作端分别负责不同的操作。
顺序访问: 队列只能访问队首的元素,不能直接访问其他元素。

队列有两个主要操作:入队(enqueue) 和 出队(dequeue)。入队是将元素添加到队尾,出队是从队首移除元素
虽然可以用列表来实现队列,但由于列表在队首插入和删除元素的效率较低(时间复杂度为O(n)),不推荐在生产环境中使用列表来实现队列。

3、对列分类

  • 单向对列:一端进,另一端出;

单向对列代码实现

import queue
q = queue.Queue()
q.put('a')
q.put('b')
print(q.get())

  • 环形队列:
    环形队列也是队列的一种数据结构, 也是在队头出队, 队尾入队;
    只是环形队列的大小是确定的, 不能进行一个长度的增加, 当你把一个环形队列创建好之后, 它能存放的元素个数是确定的;
    一般我们实现这个环形队列是通过一个连续的结构来实现的;
    虽然环形队列在逻辑上是环形的, 但在物理上是一个定长的数组;
    那如何在逻辑上形成一个环形的变化, 主要是在头尾指针当走到连续空间的末尾的时候, 它会做一个重置的操作

环形对列代码实现

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_filed():
            self.rear = (self.rear + 1) % self.size
            self.queue[self.rear] = element
        else:
            raise IndexError("Queue is empty.")
    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_filed(self):      #判断队满
        return (self.rear+1)%self.size == self.front
q=Queue(5)
for i in range(4):
    q.push(i)
print(q.pop())
q.push(4)

  • 双向队列:双向队列的两端都支持进队和出队操作

双向对列代码实现

from collections import deque
q = deque([1,2,3], 5)   #第二个参数,最大长度,队满自动出队
q.append(1)      #队尾进队
q.popleft()      #队首进队

q.appendleft(1)  #队首进队
q.pop()   #队尾出队

4、队列的应用场景
任务调度: 队列常用于任务调度器中,将任务按顺序排队执行。
广度优先搜索(BFS): 在图或树的广度优先搜索算法中,队列被用作辅助数据结构。
缓存系统: 队列可以用于实现缓存系统中的 FIFO 缓存策略。
多线程编程: 在多线程环境中,队列用于在线程间传递数据或任务

参考:
https://blog.csdn.net/weixin_44752186/article/details/141955190
https://blog.csdn.net/qq_48711800/article/details/118962516
https://www.cnblogs.com/ranzhong/p/12438841.html

标签:Python,队首,self,环形,队列,front,数据结构,size
From: https://www.cnblogs.com/jackchen28/p/18636368

相关文章

  • python怎么读取配置文件
    configparser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节点(section),每个节可以有多个参数(键=值)。使用的配置文件的好处就是不用把程序写死,可以使程序更灵活。1、创建配置文件一般将配置文件创建在config包下,配置文......
  • 3种算法实现Python3数组的旋转
    Python3实现旋转数组的3种算法下面是Python3实现的旋转数组的3种算法。一、题目给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。例如:输入:[1,2,3,4,5,6,7]和k=3输出:[5,6,7,1,2,3,4]解释:向右旋转1步:[7,1,2,3,4,5,6]向右旋转2步:[6,7,1......
  • python部署教程
    Python程序的部署涉及多个步骤,包括准备环境、打包程序、配置服务器等。以下是一个详细的Python部署教程:一、准备环境选择服务器:根据项目需求选择合适的服务器,可以是物理服务器或云服务器(如阿里云、腾讯云等)。确保服务器具有足够的硬件配置和性能,以应对工作负载和请求量......
  • Python作业有效性评价系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍通过开发人员和系统使用方的沟通,本系统的用户主要有如下几类,教师和学生。(1)教师子系......
  • OpenCV-Python实战(7)——阈值处理
    一、cv2.threshold()res,dst=cv2.threshold(src=*,thresh=*,maxval=*,type=*) res:函数返回的阈值。dst:阈值处理后的函数。src:要处理的图像。thresh:阈值。maxval:设定像素最大值。type:阈值函数处理方法,常见方法如下表所示:方法值解释THRESH_BINARY0大于阈值取最大值,......
  • 【C++数据结构——图】图的遍历(头歌教学实验平台习题) 【合集】
    目录......
  • 【java毕设 python毕设 大数据毕设】基于springboot的学生宿舍管理系统的设计与实现
    ✍✍计算机毕设编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • Python数据结构之双向循环链表
    1、循环双向链表特点通过当前结点直接获取上一结点通过头结点的上一结点直接可以去找到尾结点可以进行反向循环链表,即反转链表2、头结点链表头:在数据结构中,链表是一种常见的存储结构。链表的每个节点包含数据和指向下一个节点的指针。链表头是链表的第一个节点,它在链表的......
  • 基于Python的医疗大模型落地:面向数据库编程驱动医疗大模型轻量化变革
    一、引言1.1研究背景与意义随着医疗大模型在医疗领域的广泛应用,其在辅助医疗决策、疾病诊断、药物研发等方面发挥着重要作用。然而,医疗大模型在落地过程中面临诸多困境,如数据隐私保护、模型复杂导致成本高昂以及基层医疗适配性差等问题。与此同时,PostgreSQL凭借其强大的数......
  • Python批量统计栅格数据最大值、最小值、平均值,并将结果存在excel中
    @[Python批量统计栅格数据最大值、最小值、平均值,并将结果存在excel中importosimportrasterioimportnumpyasnpimportpandasaspddefcollect_tif_stats(root_dir,process_all_bands=False):stats_list=[]#遍历文件夹和子文件夹forsubdir,......