基于c++版本数组队列改-Python数组队列的总结

news2024/11/24 19:29:39

##队列部分-猫猫排队

是一种遵循先入先出规则的线性数据结构。

是一种模拟排队现象,新来的人不断加入到队列尾部,而位于队列头部的人不断离开。

##抽象数据类型队列的定义

队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素。

##图例显示

我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队尾的操作称为“入队”,删除队首元素的操作称为“出队”。

##队列的常用操作

##图解

##基于数组的队列实现

我们在数组中进行删除首元素的时间复杂度为O(n),这就导致了出队的操作效率低下。

采用变量front指向队首元素的索引,rear = front + size ,通过一个变量size来记录队列的长度。

基于此设计,数组中所包含的元素的有效区间为[front,rear - 1]

入队操作:只需要将元素赋值给rear索引处,并将size增加1。

出队操作:只需要将front增加1,并将size减少1。

##问题:

在不断进行入队和出队的过程中,front 和 rear 都在向右移动,当它们到达数组尾部时就无法继续移动了。为了解决此问题,我们可以将数组视为首尾相接的“环形数组”。

对于环形数组,我们需要让 front 或 rear 在越过数组尾部时,直接回到数组头部继续遍历。这种周期性规律可以通过“取余操作”来实现,

##基于数组的队列代码实现

class ArrayQueue:
    """基于环形数组实现的队列"""

    def __init__(self,size):
        """构造方法"""
        self._nums : list[int] = [0] *size #用于存储队列元素的数组
        self._front : int = 0 #队首指针,指向队首元素
        self._size : int = 0 #队列长度

    def capacity(self):
        """获取队列的容量"""
        return  len(self._nums)

    def size(self):
        """获取队列的长度"""
        return self._size

    def is_empty(self):
        """判断队列是否为空"""
        return  self._size == 0

    def push(self,num):
        """入队操作"""
        if self._size == self.capacity():
            raise IndexError("队列已满")
        #计算尾指针,指向对尾的索引 + 1
        #通过取余操作,实现rear超过数组尾部后回到头部
        rear : int = (self._front + self._size) % self.capacity()
        #将num添加至对尾
        self._nums[rear] = num
        self._size += 1

    def pop(self):
        """出队"""
        num : int = self.peek()
        #队首指针指向后移动一位,若超过数组尾部后回到头部
        rear : int = (self._front + self._size) % self.capacity()
        self._size -= 1
        return num

    def peek(self):
        """访问队首元素"""
        if self.is_empty():
            raise IndexError("栈为空")
        return self._nums[self._front]

    def to_list(self):
        """转化成列表用于打印"""
        res = [0] * self.size()
        j : int = self._front
        for i in range(self.size()):
            res[i] = self._nums[(j%self.capacity())]
            j += 1
        return  res

时间效率:在基于数组的实现中,入对和出对操作都在预先分配好的连续内存中进行,具有很好的缓存本地性,因此效率较高。然而,如果入对时超出数组容量,会触发扩容机制,导致该次入对操作的时间复杂度变为O(n) 。

空间效率:在初始化列表时,系统会为列表分配“初始容量”,该容量可能超出实际需求;并且,扩容机制通常是按照特定倍率(例如 2 倍)进行扩容的,扩容后的容量也可能超出实际需求。因此,基于数组实现的栈可能造成一定的空间浪费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1288963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Word使用相关——(待完善)

1.word 怎样删除分节符 2.word 怎样删除目录中的分节符 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我…

Linux上使用独立显卡Tesla T4(测试视频压缩)

背景 将视频处理程序单独部署至K8S之外,使用独立GPU显卡的一台服务器上。 需事先对GPU性能做简单测试。 已通过zabbix对Linux进行了系统资源监控。 已通过PrometheusGrafana对显卡Tesla T4做了性能监控。 逐步补充,稍等 2023年12月6日 操作 查看当前…

【GPU】linux 安装、卸载 nvidia 显卡驱动、cuda 的官方文档、推荐方式(runfile)

文章目录 1. 显卡驱动1.1. 各版本下载地址1.2. 各版本文档地址1.3. 安装、卸载方式 2. CUDA2.1. 各版本下载地址2.2. 各版本文档地址2.3. 安装、卸载方式2.4. 多版本 CUDA 切换方式 1. 显卡驱动 1.1. 各版本下载地址 https://www.nvidia.com/Download/Find.aspx?langzh-cn 1…

【zip密码】如何删除zip压缩包的密码?

大家都知道压缩包可以进行加密,但是当我们不需要加密压缩包的时候,该如何删除zip压缩包密码呢?那么zip压缩包密码取消都有什么方法呢?今天将方法总结分享给大家。 最原始的方法,就是通过解压文件,将解压出…

class038 经典递归解析【算法】

class038 经典递归解析 算法讲解038【必备】常见经典递归过程解析 code1 字符串的全部子序列 // 字符串的全部子序列 // 子序列本身是可以有重复的,只是这个题目要求去重 // 测试链接 : https://www.nowcoder.com/practice/92e6247998294f2c933906fdedbc6e6a pac…

c++搭建http服务器

HTTP请求协议格式如下&#xff1a; HTTP响应协议格式如下&#xff1a; #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <string>#pragma comment(lib, "ws2_32.lib")//std::string generateResponse(const st…

华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

固定Microsoft Edge浏览器的位置设置,避免自动回调至中国

问题描述 在使用Copilot等功能时&#xff0c;需要将Microsoft Edge浏览器的位置设置为国外。但每次重新打开浏览器后&#xff0c;位置设置又自动回调至中国&#xff0c;导致每次均需要手动调整。 原因分析 这个问题的出现是因为每次启动Microsoft Edge时&#xff0c;默认打开…

【开源】基于Vue+SpringBoot的网上药店系统

项目编号&#xff1a; S 062 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S062&#xff0c;文末获取源码。} 项目编号&#xff1a;S062&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药…

6 大 Android 照片恢复软件深度评测

当您发现令人难忘的照片在 Android 上被错误删除或丢失时&#xff0c;您可能会感到非常沮丧。然而&#xff0c;当您尝试安装一些恢复应用程序并希望将它们重新恢复时&#xff0c;其中许多应用程序无法再次检测到丢失的照片。 为了节省您逐一尝试此类应用程序的时间&#xff0c…

【华为OD题库-076】执行时长/GPU算力-Java

题目 为了充分发挥GPU算力&#xff0c;需要尽可能多的将任务交给GPU执行&#xff0c;现在有一个任务数组&#xff0c;数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务&#xff0c;一次执行耗时1秒&#xff0c;在保证GPU不空闲情况下&…

对标Gen-2!Meta发布新模型进军文生视频赛道

随着扩散模型的飞速发展&#xff0c;诞生了Midjourney、DALLE 3、Stable Difusion等一大批出色的文生图模型。但在文生视频领域却进步缓慢&#xff0c;因为文生视频多数采用逐帧生成的方式,这类自回归方法运算效率低下、成本高。 即便使用先生成关键帧,再生成中间帧新方法。如…

分类信息发布小程序效果如何

信息发布系统连接信息供需双方&#xff0c;打造信息聚合平台&#xff0c;用户可获取和发布需求信息、参与互动交流&#xff0c;适用于同城、社区交流、客户互动、业务员/经纪人发布信息场景。 制作分类信息小程序后&#xff0c;商家后台设置信息项&#xff0c;发布者填写内容发…

java 产品定制服务系统myeclipse开发sqlserver数据库BS模式java编程

一、源码特点 java 产品定制服务系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;比较流行的ssh框架系统具有完整的源代码和数据库&#xff0c;myeclipse开发系统主要采用B/S模式开发 。 javaWeb产品定制服务系统1 二、功能介绍 前台功…

好用的音乐制作工具 Studio One 6中文 for mac

Studio One 6是一款专业的音乐制作软件&#xff0c;提供了全面而强大的功能&#xff0c;帮助音乐制作人、录音工程师和创作者实现他们的创意。 它的主要特点包括&#xff1a;直观的用户界面&#xff0c;使得操作变得简单易懂&#xff1b;支持多轨录音&#xff0c;允许用户进行…

Altair推出 Altair RapidMiner 2023 平台,提供生成式 AI 功能

Altair推出 Altair RapidMiner 2023 平台&#xff0c;提供生成式 AI 功能 更新包括自动聚类、扩展 SAS、Python 和 R 编程功能等 近日&#xff0c;Altair&#xff08;纳斯达克股票代码&#xff1a;ALTR&#xff09;近日宣布其数据分析和 AI 平台 Altair RapidMiner 取得了一系…

深度学习 -- 神经网络

1、神经网络的历史 2、 M-P模型 M-P模型是首个通过模仿神经元而形成的模型。在M-P模型中,多个输入节点对应一个输出节点y。每个输入x,乘以相应的连接权重w,然后相加得到输出y。结果之和如果大于阈值h,则输出1,否则输出0。输入和输出均是0或1。 公式2.1&#xff1a; …

基于ssm+jsp的精品酒销售管理系统论文

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于精品酒销售管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了精品酒销售管理系统&#xff0c;它彻底改变…

MyBatisPlus+SpringBoot+JavaFX连接查询

前言 一般使用SprootBoot是使用SprootBootTest和Junit配合&#xff0c;但如果不是写测试类&#xff0c;怎么与javafx配合使用&#xff1f;笔者不知道&#xff0c;经过多次搜索以及问了各种AI&#xff0c;最后误打误撞&#xff0c;终于想通了&#xff0c;其实很简单。 用了许久…

碳信用市场的未来:中碳CCNG的愿景

在全球碳减排努力日益增强的背景下&#xff0c;中国碳中和发展集团有限公司&#xff08;简称中碳CCNG&#xff09;正以其创新的碳交易平台引领行业新趋势。中碳CCNG提供的一站式综合服务不仅包括碳信用的托管、买卖和抵消&#xff0c;而且通过其综合性数字平台&#xff0c;促进…