当前位置: 首页 > news >正文

python特殊循环队列_队中元素个数代替队尾指针

        对于循环队列来说,如果知道队头指针和队中元素个数,则可以计算出队尾指针。也就是说,可以用队中元素个数代替队尾指针。设计出这种循环队列的判队空、进队、出队和取队头元素的算法。


        本例的循环队列包含data 数组、队头指针 front和队中元素个数count,可以由front 和count求出队尾位置,公式如下。

rear1=(self.front+self.count)% MaxSize


        初始时front和count均置为0。队空条件为count==0;队满条件为count==MaxSize;元素e进队操作是先根据上述公式求出队尾指针rearl,将rear1循环增1,然后将元素e放置在rearl处;出队操作是先将队头指针循环增1,然后取出该位置的元素。设计本例的循环队列类CSqQueuel如下:

#rear=(self.front+self.count)%MaxSize
#队空:count==0
#队满:count==Maxsize
MaxSize = 5
class CircleQueue:  # 循环队列"""这种循环队牛逼之处就是:中元素个数代替尾指针,队满不存在空值,可存Maxsize个元素"""def __init__(self):self.data = [None] * MaxSize  # 初始空间self.front = 0self.count = 0def push(self, e):  # 元素e进队rear=(self.front+self.count)%MaxSize #得到队尾指针assert self.count!=MaxSize # 判断队满rear=(rear+1)%MaxSize #和前面的循环队列一个道理self.data[rear] = eself.count+=1def is_empty(self):  # 判断队空return self.count == 0def pop(self):  # 元素出队assert not self.is_empty()  # 先判断是否为空self.count-=1self.front = (self.front + 1) % MaxSizereturn self.data[self.front]def gethead(self):  # 获取头元素assert not self.is_empty()return self.data[(self.front + 1) % MaxSize]def getsize(self):  # 获取队列长度,在front下标小于rear时,size可以直接用rear-front获取,但是如果边删边加,导致rear小于front,此方法出错rear = (self.front + self.count) % MaxSizereturn (rear - self.front + MaxSize) % MaxSize #该式满足上叙所有情况def dispaly(self):q=self.frontif self.count != 0: #判断队空for i in range(self.getsize()):q = (q+1)%MaxSize #符合两种情况的式子print(self.data[q], end=",")else:return Nonedef pushk(qu, k, e):n = qu.getsize()if k < 1 or k > n + 1:  #k必须正常return Falseif k <= n:for i in range(1, n + 1):  #边删边进if i == k:  #插个队,它插完,后面的再边删边进qu.push(e)x = qu.pop()qu.push(x)e1se: qu.push(e)return Truedef popk(qu, k):n = qu.getsize()assert 1 <= k <= nfor i in range(1, n + 1):  #和上面的思想一样x = qu.pop()if i != k:qu.push(x)else:e = x  # 取第k个出队的元素return eif __name__=="__main__":hh = CircleQueue()# print(hh.is_empty())# hh.push(0)# hh.push(1)# hh.push(2)# hh.push(3)# print(hh.getsize())# hh.dispaly()
# True
# 4
# 0, 1, 2, 3,
# Process
# finished
# with exit code 0
# #当rear<front时
#     hh.push(3)
#     hh.push(4)
#     hh.push(5)
#     hh.push(6)
#     hh.pop()
#     hh.pop()
#     hh.pop()
#     hh.push(7)
#     hh.push(8)
#     print(hh.getsize())
#     hh.dispaly()
# 3
# 6,7,8,
# Process finished with exit code 0

 

相关文章:

python特殊循环队列_队中元素个数代替队尾指针

对于循环队列来说&#xff0c;如果知道队头指针和队中元素个数&#xff0c;则可以计算出队尾指针。也就是说&#xff0c;可以用队中元素个数代替队尾指针。设计出这种循环队列的判队空、进队、出队和取队头元素的算法。 本例的循环队列包含data 数组、队头指针 front和队中元素…...

什么是观察者模式?用 Python 如何实现 Observer(观察者或发布订阅)对象行为型模式?

什么是观察者模式&#xff1f; 观察者模式&#xff08;Observer pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象之间建立一种一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;其相关依赖对象都会得到通知并自动更新。 在观察者模式中&am…...

pytorch直线拟合

目录 1、数据分析 2、pytorch直线拟合 1、数据分析 直线拟合的前提条件通常包括以下几点&#xff1a; 存在线性关系&#xff1a;这是进行直线拟合的基础&#xff0c;数据点之间应该存在一种线性关系&#xff0c;即数据的分布可以用直线来近似描述。这种线性关系可以是数据点…...

相机传感器

相机的传感器大小通常用英寸&#xff08;1英寸2.54厘米&#xff09;来表示。例如&#xff1a;全画幅相机的传感器大小为&#xff1a;36mm*24mm&#xff0c;称为 35mm全画幅。 几分之一英寸 所谓的 1/2.7&#xff0c;1/2.5等等&#xff0c;里面的分子1是一个标准&#xff0c;分…...

大语言模型的关键技术

大语言模型的关键技术&#xff1a; 经过漫长的发展&#xff0c;LLM 进化到了当前的状态——通用且有能力的学习者。在这个过程中&#xff0c;人们提出了许多重要的技术&#xff0c;大大提升了 LLM 的能力。在此&#xff0c;我们简要列举了几种重要的技术&#xff0c;这些技术&a…...

uniapp使用vur-cli新建项目并打包

新建项目 npm install -g vue/cli vue create -p dcloudio/uni-preset-vue my-project选择默认模板npm run dev:h5 运行 安装sass和uview &#xff08;npm安装失败&#xff09; bug&#xff1a;使用uni.scss中的变量或样式&#xff0c;<style lang"scss"> 必…...

后台管理系统解决方案-中大型-Vben Admin

后台管理系统解决方案-中大型-Vben Admin 官网 Vben Admin 在线演示 Vben Admin 为什么选择它 github现有20K星&#xff0c;并且它有个可视化生成表单&#xff0c;我很喜欢 快速开始 # 拉取代码 git clone https://github.com/vbenjs/vue-vben-admin-doc# 安装依赖 yarn#…...

通俗理解repartition和coalesce区别

官方的解释 reparation 返回一个具有恰好numPartitions分区的新RDD。 可以增加或减少此RDD中的并行级别。在内部,reparation会使用shuffle来重新分发的数据。 如果要减少此RDD中的分区数量,请考虑使用coalesce,这样可以避免执行shuffle。 coalesce 返回一个新的RDD,该RDD被…...

优雅设计之美:实现Vue应用程序的时尚布局

本文为翻译文章&#xff0c;原文链接&#xff1a; ** https://fadamakis.com/clean-layout-architecture-for-vue-applications-a738201a2a1e 前言 页面布局是减少代码重复和创建可维护且具有专业外观的应用程序的基本模式。如果使用的是Nuxt&#xff0c;则可以提供开箱即用…...

05预测识别-依托YOLO V8进行训练模型的识别——对视频中的目标进行跟踪统计

上文中详细介绍了如何对视频进行抽帧,并对帧的图像进行目标识别。但在日常工作中,我们也会遇到需要对目标进行跟踪统计的情况,比如我们需要连续统计某一类目标有多少个的时候,如果单纯从帧中抽取图像的话,系统将无法判断是否为同一目标,从而造成目标数量统计的重复,导致…...

Android Studio(意图Intent)

前言 意图的作用&#xff1a;页面的跳转&#xff08;从一个页面跳转到另一个页面&#xff09;。 意图的创建&#xff1a;需要哪些参数&#xff1f;首先&#xff0c;从哪个页面跳转到哪个页面&#xff1b;其二&#xff0c;跳转到另一个页面需要携带数据吗。 下面介绍顺序&#x…...

Bean作用域

从笔者之前的博客&#xff0c;我们可以看出 Spring 是⽤来读取和存储 Bean&#xff0c;因此在 Spring 中 Bean 是最核⼼的操作 资源&#xff0c;所以接下来我们深⼊学习⼀下 Bean 对象&#xff1a;Bean作用域&#xff01; 限定程序中变量的可用范围叫做作用域&#xff01;或者…...

YOLOV5----修改损失函数-SE

主要修改yolo.py、yolov5s.yaml及添加SE.py 一、SE.py import numpy as np import torch from torch import nn from torch.nn import initclass SEAttention(nn.Module):def __init__(self, channel=512...

Mybatis(一)

1. Mybatis简介 MyBatis下载地址 1.1 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff0c;iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github…...

使用Go构建一个Postgres流平台

使用 Go 通道从拉推模型转向更高效的流方法。这通过重叠拉取和推送阶段来提高性能&#xff0c;减少总体处理时间和延迟。 Go通道提供数据同步、资源管理和并发处理。它们允许 goroutine 安全地通信和交换数据。这些源实现了每秒 10-12k 事务的吞吐量&#xff0c;最小延迟为 1-…...

QT基础与细节理解

前言 本博客旨在记录QT学习过程中的一些细节知识理解&#xff0c;由于问题的产生并非成体系&#xff0c;所以前期的记录可能会无序一些。烦请读者参阅目录进行快速的问题定位与跳转 QT基础与细节理解 前言正文部分QT基础1&#xff1a;正确理解: QWidget(parent), ui(new Ui::u…...

【MySQL数据库】 六

本文主要介绍了数据库原理中数据库索引和事务相关概念. 一.索引 在查询表的时候,最基本的方式就是遍历表,一条一条筛选 . 因此,就可以给这个表建立索引,来提高查找的速度 比如,按照id建立索引 在数据库上额外搞一个空间维护一些id 相关的信息, id:1 表的某个位置 id:2 …...

微信总提示空间不足怎么办?三个方法随心选!

微信显示空间不足会给用户带来很多困扰&#xff0c;比如影响手机的正常使用&#xff0c;占用大量存储空间&#xff0c;导致手机运行缓慢&#xff0c;没法分享图片和视频&#xff0c;影响我们的社交交流。下面提供了一些简单实用的方法。 方法一&#xff1a;清理微信缓存 1、打…...

C语言每日一题(27)链表中倒数第k个结点

牛客网 链表中倒数第k个结点 题目描述 描述 输入一个链表&#xff0c;输出该链表中倒数第k个结点。 思路分析 这是一道经典的快慢指针题&#xff0c;fast和slow最开始都指向头结点&#xff0c;对于输入值k&#xff0c;先让快指针fast先走k步&#xff0c;之后再让两个指针一…...

pdf转word

1、pip install pdf2docx 2、 from pdf2docx import Converterpdf_filerH:\测试.pdf docx_filerH:\测试_word.docxcvConverter(pdf_file) cv.convert(docx_file,start0,endNone) cv.close()会根据H目录中的pdf,在本目录自动生成相应的word...

2025年6月|注意力机制|面向精度与推理速度提升的YOLOv8模型结构优化研究:融合ACmix的自研改进方案

版本&#xff1a; 8.3.143(Ultralytics YOLOv8框架) ACmix模块原理 在目标检测任务中&#xff0c;小目标&#xff08;如裂缝、瑕疵、零件边缘等&#xff09;由于其尺寸较小、纹理信息稀疏&#xff0c;通常更容易受到图像中复杂背景或噪声的干扰&#xff0c;从而导致漏检或误检…...

【PDF PicKiller】PDF批量删除固定位置图片工具,默认解密,可去一般图、背景图、水印图!

PDF批量删除固定位置图片工具 PDF PicKiller <center>PDF PicKiller [Download](https://github.com/Peaceful-World-X/PDF-PicKiller)&#x1f929; 工具介绍&#x1f973; 主要功能&#x1f92a; 软件使用&#x1f92a; 参数解释&#x1f92a; 关键代码&#x1f929; 项…...

Go 语言实现高性能 EventBus 事件总线系统(含网络通信、微服务、并发异步实战)

前言 在现代微服务与事件驱动架构&#xff08;EDA&#xff09;中&#xff0c;事件总线&#xff08;EventBus&#xff09; 是实现模块解耦与系统异步处理的关键机制。 本文将以 Go 语言为基础&#xff0c;从零构建一个高性能、可扩展的事件总线系统&#xff0c;深入讲解&#…...

OpenCV CUDA模块图像处理------图像融合函数blendLinear()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数执行 线性融合&#xff08;加权平均&#xff09; 两个图像 img1 和 img2&#xff0c;使用对应的权重图 weights1 和 weights2。 融合公式…...

Build a Large Language Model (From Scratch) 序章

关于本书 《从零构建大型语言模型》旨在帮助读者全面理解并从头创建类似GPT的大型语言模型&#xff08;LLMs&#xff09;。 全书首先聚焦于文本数据处理的基础知识和注意力机制的编码&#xff0c;随后指导读者逐步实现一个完整的GPT模型。书中还涵盖了预训练机制以及针对文本…...

Go 中的 Map 与字符处理指南

Go 中的 Map 与字符处理指南 在 Go 中&#xff0c;map 可以存储字符&#xff0c;但需要理解字符在 Go 中的表示方式。在 Go 语言中&#xff0c;"字符" 实际上有两种表示方法&#xff1a;byte&#xff08;ASCII 字符&#xff09;和 rune&#xff08;Unicode 字符&…...

AI大数据模型如何与thingsboard物联网结合

一、 AI大数据与ThingsBoard物联网的结合可以从以下几个方面实现&#xff1a; 1. 数据采集与集成 设备接入&#xff1a;ThingsBoard支持多种通信协议&#xff08;如MQTT、CoAP、HTTP、Modbus、OPC-UA等&#xff09;&#xff0c;可以方便地接入各种物联网设备。通过这些协议&am…...

如何以 9 种方式将照片从手机传输到笔记本电脑

使用 USB 电缆可以将照片从智能手机复制到计算机。但是&#xff0c;如果没有 USB 数据线&#xff0c;如何将照片从手机无线传输到笔记本电脑呢&#xff1f;为了解决这个问题&#xff0c;我们搜索并测试了不同的应用程序&#xff0c;然后总结了本指南中分享的 9 个有效选项。您可…...

黄晓明新剧《潜渊》定档 失忆三面间谍开启谍战新维度

据悉&#xff0c;黄晓明领衔主演的谍战剧《潜渊》已于近日正式定档6月9日&#xff0c;该剧以“失忆三面间谍”梁朔为核心&#xff0c;打破传统谍战剧的框架和固有角度&#xff0c;以一种特别的视角将悬疑感推向极致。剧中&#xff0c;梁朔因头部受伤失去记忆&#xff0c;陷入身…...

护网行动面试试题(2)

文章目录 51、常见的安全工具有哪些&#xff1f;52、说说Nmap工具的使用&#xff1f;53、近几年HW常见漏洞有哪些&#xff1f;54、HW 三&#xff08;四&#xff09;大洞56、获得文件读取漏洞&#xff0c;通常会读哪些文件57、了解过反序列化漏洞吗&#xff1f;58、常见的框架漏…...