使用Python语言实现一个基于动态数组的序列队列
一、动态数组的实现
- 首先,我们需要创建一个
DynamicArray类,该类将管理我们的动态数组。- 动态数组能够动态地调整其大小,以容纳更多的元素。
目录
一、动态数组的实现
代码示例:
二、序列队列的实现
接下来,我们基于DynamicArray类实现SeqQueue类。序列队列将提供标准的队列操作,如入队、出队、检查队列是否为空等。

-
代码示例:
class DynamicArray: def __init__(self, initial_capacity=10): """初始化动态数组,设置初始容量""" self.capacity = initial_capacity self.size = 0 self.array = [None] * self.capacity def is_empty(self): """检查动态数组是否为空""" return self.size == 0 def is_full(self): """检查动态数组是否已满""" return self.size == self.capacity def resize(self, new_capacity): """调整动态数组的大小""" new_array = [None] * new_capacity for i in range(self.size): new_array[i] = self.array[i] self.array = new_array self.capacity = new_capacity def insert(self, index, data): """在指定索引处插入数据""" if self.is_full(): self.resize(self.capacity * 2) # 扩容 if index < 0 or index > self.size: raise IndexError("Index out of range") for i in range(self.size, index, -1): self.array[i] = self.array[i - 1] self.array[index] = data self.size += 1 def remove(self, index): """移除指定索引处的数据""" if self.is_empty(): raise IndexError("Cannot remove from an empty array") if index < 0 or index >= self.size: raise IndexError("Index out of range") for i in range(index, self.size - 1): self.array[i] = self.array[i + 1] self.array[self.size - 1] = None self.size -= 1 if self.size > 0 and self.size == self.capacity // 4: # 缩容 self.resize(self.capacity // 2) def get(self, index): """获取指定索引处的数据""" if index < 0 or index >= self.size: raise IndexError("Index out of range") return self.array[index] def __len__(self): """返回动态数组的大小""" return self.size
二、序列队列的实现
-
接下来,我们基于
DynamicArray类实现SeqQueue类。序列队列将提供标准的队列操作,如入队、出队、检查队列是否为空等。
class SeqQueue: def __init__(self, initial_capacity=10): """初始化序列队列,设置初始容量""" self.queue = DynamicArray(initial_capacity) def is_empty(self): """检查队列是否为空""" return self.queue.is_empty() def enqueue(self, item): """入队操作,将元素添加到队列末尾""" self.queue.insert(self.queue.size, item) def dequeue(self): """出队操作,移除并返回队列的第一个元素""" if self.is_empty(): raise IndexError("Dequeue from an empty queue") return self.queue.remove(0) def size(self): """返回队列中元素的数量""" return len(self.queue) def front(self): """返回队列的第一个元素,但不移除它""" if self.is_empty(): raise IndexError("Queue is empty") return self.queue.get(0) def back(self): """返回队列的最后一个元素,但不移除它""" if self.is_empty(): raise IndexError("Queue is empty") return self.queue.get(self.queue.size - 1)def destroy(self): self.queue = None # 使用示例 max_size = 10 seq_queue = SeqQueue(max_size) # 入队 seq_queue.push("data1") seq_queue.push("data2") # 获取队首元素 print(seq_queue.front()) # 输出: data1 # 获取队尾元素 print(seq_queue.back()) # 输出: data2 # 出队 seq_queue.pop() # 再次获取队首元素 print(seq_queue.front()) # 输出: data2 # 销毁队列 seq_queue.destroy()
在这个文件中,
DynamicArray类定义了一个动态数组,而SeqQueue类则定义了一个基于DynamicArray的序列队列。您可以直接运行这个文件来测试这些类的功能。请注意,这个示例假设您希望队列在出队时返回被移除的元素,所以pop方法现在返回被移除的元素。如果您不希望这样,您可以相应地调整pop方法的实现。
相关文章:
使用Python语言实现一个基于动态数组的序列队列
一、动态数组的实现 首先,我们需要创建一个DynamicArray类,该类将管理我们的动态数组。 动态数组能够动态地调整其大小,以容纳更多的元素。 目录 一、动态数组的实现 代码示例: 二、序列队列的实现 接下来,我…...
面试数据库篇(mysql)- 07索引创建原则与失效及优化
索引创建原则 1). 针对于数据量较大,且查询比较频繁的表建立索引。 2). 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。 3). 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。 4). 如果是字符…...
《互联网的世界》第三讲-tcp
dns 找到了地址,spf 确定了路径,如何运输数据呢?今天讲 tcp。 计算机网络领域的特定技术是最后当你干这个事时才要用的,我对孩子们这样说,实际上你可以随便看一个快递单子来理解端到端传输协议。 源地址,…...
JOSEF约瑟 JZS-7G-42 AC220V静态可调延时中间继电器 端子式导轨安装15ms-10s
系列型号:JZS-7G-57端子排延时中间继电器;JZS-7G-42X端子排延时中间继电器;JZS-7G-22X端子排延时中间继电器;JZS-7G-21端子排延时中间继电器;JZS-7G-41端子排延时中间继电器;JZS-7G-51端子排延时中间继电器…...
Hudi配置参数优化
1)Commits:表示一批记录原子性的写入到一张表中。 2)Cleans:清除表中不再需要的旧版本文件。 3)Delta_commit:增量提交指的是将一批记录原子地写入MergeOnRead类型表,其中一些/所有数据都可以写入增量日志。 4&…...
适用Java SpringBoot项目的分布式锁
在分布式系统中,常用到分布式锁,它有多中实现方式,如:基于redis,database,zookeeper等。Spring integration组件有这三种服务的分布式锁实现,今天来看看用的比较多的redis和database实现方式。 …...
面试笔记系列二之java基础+集合知识点整理及常见面试题
目录 Java面向对象有哪些特征,如何应用 Java基本数据类型及所占字节 Java中重写和重载有哪些区别 jdk1.8的新特性有哪些 内部类 1. 成员内部类(Member Inner Class): 2. 静态内部类(Static Nested Class&#…...
搭建LNMP环境并搭建论坛和博客
目录 一、LNMP架构原理 二、编译安装Nginx 三、编译安装MySQL 四、编译安装PHP 五、配置Nginx支持PHP解析 六、安装论坛 七、安装博客 一、LNMP架构原理 LNMP架构,是指在Linux平台下,由运行Nginx的web服务器,运行PHP的动态页面解析程序…...
蓝桥杯刷题2
1. 修建灌木 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int n scan.nextInt();for (int i 1;i < n1;i){int distance Math.max(i-1,n-i);System.out.println(distance*2);}scan.close…...
低代码与国产化部署:软件开发的未来趋势与应用实践
在数字化时代,软件开发已经成为企业创新和竞争力提升的关键。随着我国科技实力的不断提升,国产化部署逐渐成为软件开发领域的重要趋势。与此同时,低代码技术的发展也为国产化部署提供了新的机遇。本文将探讨如何在软件开发过程中充分发挥两者…...
【Python笔记-设计模式】迭代器模式
一、说明 迭代器模式是一种行为设计模式,让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。 (一) 解决问题 遍历聚合对象中的元素,而不需要暴露该对象的内部表示 (二) 使用场景 需要对聚合对象…...
Linux基本指令(上)
在Linux中,将文件夹称为目录,后面的内容都与目录相关。 1. ls指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项 …...
浅谈XSS简单漏洞xss-labs-master(初级)
一、环境以及xss漏洞简介 网上很多gethub自己下就行 XSS简介: 当用户访问被XSS注入的网页,XSS代码就会被提取出来。用户浏览器就会解析这段XSS代码,也就是说用户被攻击了。 用户最简单的动作就是使用浏览器上网,并且浏览器中有J…...
WordPress分类目录ID怎么看?如何查找WordPress标签ID?
在WordPress网站中,我们需要判断某篇文章是否属于某个分类目录,或者是否拥有某个标签,那么就需要用到分类目录ID和标签ID,那么WordPress分类目录ID怎么看?如何查找WordPress标签ID?下面boke112百科就跟大家…...
达梦数据库基础操作(一):用户操作
达梦数据库基础操作(一):用户操作 1 达梦运行状态 SELECT banner as 版本信息 FROM v$version;1.2 达梦版本号 SELECT banner as 版本信息 FROM v$version;1.3 用户相关操作 默认用户名密码:SYSDBA/SYSDBA 注意:在哪个数据库下创建的用户…...
Java进阶(锁)——锁的升级,synchronized与lock锁区别
目录 引出Java中锁升级synchronized与lock锁区别 缓存三兄弟:缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Java进阶(锁)——锁的升级,synchronized与lock锁区别 Java中锁升级 看一段代码: public class…...
Flask+Gunicorn中文乱码解决方案
在使用FlaskGunicorn部署应用时,发现中文的输出存在乱码的现象。这是因为Python的默认编码是ASCII,而ASCII并不支持中文字符。 解决Python中文乱码问题的首要任务是确保使用合适的编码方式。当你处理中文字符时,应该使用UTF-8编码。UTF-8是一…...
vue3的开发小技巧
「总之岁月漫长,然而值得等待。」 目录 父组件调用子组件函数 父组件调用子组件函数 ref, defineExpose //父组件 代码 <child ref"ch">this.$refs.ch.fn();//子组件 函数抛出 const fn () > { }; defineExpose({ fn });...
十三、Qt多线程与线程安全
一、多线程程序 QThread类提供了管理线程的方法:一个对象管理一个线程一般从QThread继承一个自定义类,重载run函数 1、实现程序 (1)创建项目,基于QDialog (2)添加类,修改基于QThr…...
今日话题:---自卑
自卑是一种普遍存在的心理现象,它可能源于个人对自身能力、外貌、社会地位等方面的不满意或不自信。自卑感可能会导致消极的情绪和行为,如焦虑、抑郁、逃避现实等。然而,适度的自卑感也可能激发个人努力提升自己,从而实现自我成长…...
如何高效使用开源分子编辑器Ketcher:从科研绘图到药物设计的完整指南
如何高效使用开源分子编辑器Ketcher:从科研绘图到药物设计的完整指南 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher 在化学研究和药物开发领域,分子结构绘制是一项基础但至关重要的…...
U盘拷贝显示文件xxx过大问题
有时当我们将文件拷贝到U盘时,明明磁盘还有足够的储存空间,但却出现了“对于目标文件系统,文件‘XXX’过大”提示信息,导致文件无法正常拷贝。那么这是怎么回事呢?我们又该如何解决这个问题呢?下面我们就一…...
【行业洞察】实时图表编辑器的架构范式转换:从代码到可视化的状态同步挑战
【行业洞察】实时图表编辑器的架构范式转换:从代码到可视化的状态同步挑战 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/…...
雀魂Mod Plus终极指南:如何免费解锁全角色皮肤和装扮
雀魂Mod Plus终极指南:如何免费解锁全角色皮肤和装扮 【免费下载链接】majsoul_mod_plus 雀魂解锁全角色、皮肤、装扮等,支持全部服务器。 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_mod_plus 还在为雀魂游戏中无法获得心仪角色和皮肤…...
GIS小白必看:如何用GeoServer把普通图片变成可交互地图(附QGIS配准技巧)
GIS入门实战:从普通图片到可交互地图的完整指南 引言:为什么需要将图片转换为可交互地图? 在日常工作中,我们经常会遇到这样的场景:客户提供了一张手绘地图、历史航拍图或是扫描的规划图纸,但这些图片文件…...
简站WordPress主题下载与安装完全指南
“简站WordPress主题”是一套专注于国内企业展示型网站的WordPress主题系列,以其轻量、简洁、SEO友好著称。为了确保您获得安全、完整、可长期使用的主题文件,并避免因使用盗版主题带来的安全风险与法律问题,请严格按照以下官方渠道进行下载。…...
免费获取米哈游游戏字体:11款架空文字完整安装指南
免费获取米哈游游戏字体:11款架空文字完整安装指南 【免费下载链接】HoYo-Glyphs Constructed scripts by HoYoverse 米哈游的架空文字 项目地址: https://gitcode.com/gh_mirrors/ho/HoYo-Glyphs 想要为你的设计作品注入米哈游游戏的独特魅力吗?…...
Agent深度问题
一. skills和sub agent的区别 在 AI Agent 架构体系中,Skills(技能) 和 Sub Agent(子智能体) 是两种核心的能力扩展方案,二者的核心差异在于是否具备独立推理规划能力、是否拥有独立上下文生命周期,可通俗理解为「工具箱里的专用工具」与「可独立干活的专项专家」的区别…...
FPGA新手避坑指南:手把手教你搞定RTL8211千兆网PHY的时序配置(附Verilog代码)
FPGA实战:RTL8211千兆网PHY时序配置全解析与避坑指南 刚接触FPGA与以太网通信的开发者,十有八九会在RTL8211这类千兆网PHY芯片上栽跟头——硬件连接看似正确,代码逻辑反复检查无误,但网络就是不通,或者频繁丢包。这往往…...
MiniCPM-o-4.5-nvidia-FlagOS企业应用:制造业BOM图纸识别+物料说明生成系统
MiniCPM-o-4.5-nvidia-FlagOS企业应用:制造业BOM图纸识别物料说明生成系统 1. 引言:当图纸遇到AI,制造业的“说明书”难题迎刃而解 想象一下这个场景:一家制造工厂的工程师小王,正对着一份刚从供应商那里发来的复杂装…...
