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

使用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语言实现一个基于动态数组的序列队列

一、动态数组的实现 首先&#xff0c;我们需要创建一个DynamicArray类&#xff0c;该类将管理我们的动态数组。 动态数组能够动态地调整其大小&#xff0c;以容纳更多的元素。 目录 一、动态数组的实现 代码示例&#xff1a; 二、序列队列的实现 接下来&#xff0c;我…...

面试数据库篇(mysql)- 07索引创建原则与失效及优化

索引创建原则 1). 针对于数据量较大,且查询比较频繁的表建立索引。 2). 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。 3). 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。 4). 如果是字符…...

《互联网的世界》第三讲-tcp

dns 找到了地址&#xff0c;spf 确定了路径&#xff0c;如何运输数据呢&#xff1f;今天讲 tcp。 计算机网络领域的特定技术是最后当你干这个事时才要用的&#xff0c;我对孩子们这样说&#xff0c;实际上你可以随便看一个快递单子来理解端到端传输协议。 源地址&#xff0c…...

JOSEF约瑟 JZS-7G-42 AC220V静态可调延时中间继电器 端子式导轨安装15ms-10s

系列型号&#xff1a;JZS-7G-57端子排延时中间继电器&#xff1b;JZS-7G-42X端子排延时中间继电器&#xff1b;JZS-7G-22X端子排延时中间继电器&#xff1b;JZS-7G-21端子排延时中间继电器&#xff1b;JZS-7G-41端子排延时中间继电器&#xff1b;JZS-7G-51端子排延时中间继电器…...

Hudi配置参数优化

1&#xff09;Commits&#xff1a;表示一批记录原子性的写入到一张表中。 2&#xff09;Cleans:清除表中不再需要的旧版本文件。 3&#xff09;Delta_commit:增量提交指的是将一批记录原子地写入MergeOnRead类型表&#xff0c;其中一些/所有数据都可以写入增量日志。 4&…...

适用Java SpringBoot项目的分布式锁

在分布式系统中&#xff0c;常用到分布式锁&#xff0c;它有多中实现方式&#xff0c;如&#xff1a;基于redis&#xff0c;database&#xff0c;zookeeper等。Spring integration组件有这三种服务的分布式锁实现&#xff0c;今天来看看用的比较多的redis和database实现方式。 …...

面试笔记系列二之java基础+集合知识点整理及常见面试题

目录 Java面向对象有哪些特征&#xff0c;如何应用 Java基本数据类型及所占字节 Java中重写和重载有哪些区别 jdk1.8的新特性有哪些 内部类 1. 成员内部类&#xff08;Member Inner Class&#xff09;&#xff1a; 2. 静态内部类&#xff08;Static Nested Class&#…...

搭建LNMP环境并搭建论坛和博客

目录 一、LNMP架构原理 二、编译安装Nginx 三、编译安装MySQL 四、编译安装PHP 五、配置Nginx支持PHP解析 六、安装论坛 七、安装博客 一、LNMP架构原理 LNMP架构&#xff0c;是指在Linux平台下&#xff0c;由运行Nginx的web服务器&#xff0c;运行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…...

低代码与国产化部署:软件开发的未来趋势与应用实践

在数字化时代&#xff0c;软件开发已经成为企业创新和竞争力提升的关键。随着我国科技实力的不断提升&#xff0c;国产化部署逐渐成为软件开发领域的重要趋势。与此同时&#xff0c;低代码技术的发展也为国产化部署提供了新的机遇。本文将探讨如何在软件开发过程中充分发挥两者…...

【Python笔记-设计模式】迭代器模式

一、说明 迭代器模式是一种行为设计模式&#xff0c;让你能在不暴露集合底层表现形式&#xff08;列表、栈和树等&#xff09;的情况下遍历集合中所有的元素。 (一) 解决问题 遍历聚合对象中的元素&#xff0c;而不需要暴露该对象的内部表示 (二) 使用场景 需要对聚合对象…...

Linux基本指令(上)

在Linux中&#xff0c;将文件夹称为目录&#xff0c;后面的内容都与目录相关。 1. ls指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项 …...

浅谈XSS简单漏洞xss-labs-master(初级)

一、环境以及xss漏洞简介 网上很多gethub自己下就行 XSS简介&#xff1a; 当用户访问被XSS注入的网页&#xff0c;XSS代码就会被提取出来。用户浏览器就会解析这段XSS代码&#xff0c;也就是说用户被攻击了。 用户最简单的动作就是使用浏览器上网&#xff0c;并且浏览器中有J…...

WordPress分类目录ID怎么看?如何查找WordPress标签ID?

在WordPress网站中&#xff0c;我们需要判断某篇文章是否属于某个分类目录&#xff0c;或者是否拥有某个标签&#xff0c;那么就需要用到分类目录ID和标签ID&#xff0c;那么WordPress分类目录ID怎么看&#xff1f;如何查找WordPress标签ID&#xff1f;下面boke112百科就跟大家…...

达梦数据库基础操作(一):用户操作

达梦数据库基础操作(一)&#xff1a;用户操作 1 达梦运行状态 SELECT banner as 版本信息 FROM v$version;1.2 达梦版本号 SELECT banner as 版本信息 FROM v$version;1.3 用户相关操作 默认用户名密码&#xff1a;SYSDBA/SYSDBA 注意&#xff1a;在哪个数据库下创建的用户…...

Java进阶(锁)——锁的升级,synchronized与lock锁区别

目录 引出Java中锁升级synchronized与lock锁区别 缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Java进阶&#xff08;锁&#xff09;——锁的升级&#xff0c;synchronized与lock锁区别 Java中锁升级 看一段代码&#xff1a; public class…...

Flask+Gunicorn中文乱码解决方案

在使用FlaskGunicorn部署应用时&#xff0c;发现中文的输出存在乱码的现象。这是因为Python的默认编码是ASCII&#xff0c;而ASCII并不支持中文字符。 解决Python中文乱码问题的首要任务是确保使用合适的编码方式。当你处理中文字符时&#xff0c;应该使用UTF-8编码。UTF-8是一…...

vue3的开发小技巧

「总之岁月漫长&#xff0c;然而值得等待。」 目录 父组件调用子组件函数 父组件调用子组件函数 ref, defineExpose //父组件 代码 <child ref"ch">this.$refs.ch.fn();//子组件 函数抛出 const fn () > { }; defineExpose({ fn });...

十三、Qt多线程与线程安全

一、多线程程序 QThread类提供了管理线程的方法&#xff1a;一个对象管理一个线程一般从QThread继承一个自定义类&#xff0c;重载run函数 1、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QDialog &#xff08;2&#xff09;添加类&#xff0c;修改基于QThr…...

今日话题:---自卑

自卑是一种普遍存在的心理现象&#xff0c;它可能源于个人对自身能力、外貌、社会地位等方面的不满意或不自信。自卑感可能会导致消极的情绪和行为&#xff0c;如焦虑、抑郁、逃避现实等。然而&#xff0c;适度的自卑感也可能激发个人努力提升自己&#xff0c;从而实现自我成长…...

如何高效使用开源分子编辑器Ketcher:从科研绘图到药物设计的完整指南

如何高效使用开源分子编辑器Ketcher&#xff1a;从科研绘图到药物设计的完整指南 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher 在化学研究和药物开发领域&#xff0c;分子结构绘制是一项基础但至关重要的…...

U盘拷贝显示文件xxx过大问题

有时当我们将文件拷贝到U盘时&#xff0c;明明磁盘还有足够的储存空间&#xff0c;但却出现了“对于目标文件系统&#xff0c;文件‘XXX’过大”提示信息&#xff0c;导致文件无法正常拷贝。那么这是怎么回事呢&#xff1f;我们又该如何解决这个问题呢&#xff1f;下面我们就一…...

【行业洞察】实时图表编辑器的架构范式转换:从代码到可视化的状态同步挑战

【行业洞察】实时图表编辑器的架构范式转换&#xff1a;从代码到可视化的状态同步挑战 【免费下载链接】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终极指南&#xff1a;如何免费解锁全角色皮肤和装扮 【免费下载链接】majsoul_mod_plus 雀魂解锁全角色、皮肤、装扮等&#xff0c;支持全部服务器。 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_mod_plus 还在为雀魂游戏中无法获得心仪角色和皮肤…...

GIS小白必看:如何用GeoServer把普通图片变成可交互地图(附QGIS配准技巧)

GIS入门实战&#xff1a;从普通图片到可交互地图的完整指南 引言&#xff1a;为什么需要将图片转换为可交互地图&#xff1f; 在日常工作中&#xff0c;我们经常会遇到这样的场景&#xff1a;客户提供了一张手绘地图、历史航拍图或是扫描的规划图纸&#xff0c;但这些图片文件…...

简站WordPress主题下载与安装完全指南

“简站WordPress主题”是一套专注于国内企业展示型网站的WordPress主题系列&#xff0c;以其轻量、简洁、SEO友好著称。为了确保您获得安全、完整、可长期使用的主题文件&#xff0c;并避免因使用盗版主题带来的安全风险与法律问题&#xff0c;请严格按照以下官方渠道进行下载。…...

免费获取米哈游游戏字体:11款架空文字完整安装指南

免费获取米哈游游戏字体&#xff1a;11款架空文字完整安装指南 【免费下载链接】HoYo-Glyphs Constructed scripts by HoYoverse 米哈游的架空文字 项目地址: https://gitcode.com/gh_mirrors/ho/HoYo-Glyphs 想要为你的设计作品注入米哈游游戏的独特魅力吗&#xff1f;…...

Agent深度问题

一. skills和sub agent的区别 在 AI Agent 架构体系中,Skills(技能) 和 Sub Agent(子智能体) 是两种核心的能力扩展方案,二者的核心差异在于是否具备独立推理规划能力、是否拥有独立上下文生命周期,可通俗理解为「工具箱里的专用工具」与「可独立干活的专项专家」的区别…...

FPGA新手避坑指南:手把手教你搞定RTL8211千兆网PHY的时序配置(附Verilog代码)

FPGA实战&#xff1a;RTL8211千兆网PHY时序配置全解析与避坑指南 刚接触FPGA与以太网通信的开发者&#xff0c;十有八九会在RTL8211这类千兆网PHY芯片上栽跟头——硬件连接看似正确&#xff0c;代码逻辑反复检查无误&#xff0c;但网络就是不通&#xff0c;或者频繁丢包。这往往…...

MiniCPM-o-4.5-nvidia-FlagOS企业应用:制造业BOM图纸识别+物料说明生成系统

MiniCPM-o-4.5-nvidia-FlagOS企业应用&#xff1a;制造业BOM图纸识别物料说明生成系统 1. 引言&#xff1a;当图纸遇到AI&#xff0c;制造业的“说明书”难题迎刃而解 想象一下这个场景&#xff1a;一家制造工厂的工程师小王&#xff0c;正对着一份刚从供应商那里发来的复杂装…...