使用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方法的实现。

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

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

相关文章

代码随想录算法训练营第五天

● 自己看到题目的第一想法 242. 有效的字母异位词 方法&#xff1a; 方法一&#xff1a; 暴力法 1. 分别对s, t排序 2. 遍历s与t 判断s[i]!t[i] 返回 false 否则 返回true思路&#xff1a; 注意&#xff1a; 代码&#xff1a; bool cmp(char a, char b){return a<b;…

网站搭建的基本流程是什么?

网站搭建的基本流程是什么? 我们选择了白嫖雨云的二级域名 浏览器输入https://www.rainyun.com/z22_ 创建账号然后选择一个你喜欢的子域名我建议后缀选择ates.top的 选择自定义地址&#xff0c;类型选择cname 现在要选择记录值了&#xff0c;有a&#xff0c;aa&#xff0c;txt…

【Logback】Logback 的配置文件

目录 一、初始化配置文件 1、logback 配置文件的初始化顺序 2、logback 内部状态信息 二、配置文件的结构 1、logger 元素 2、root 元素 3、appender 元素 三、配置文件中的变量引用 1、如何定义一个变量 2、为变量设置默认值 3、变量的嵌套 In symbols one observe…

如何压缩word文档中的图片大小?一键批量压缩~

在日常工作和学习中&#xff0c;我们经常需要创建和编辑Word文档&#xff0c;并在其中插入图片来丰富内容。然而&#xff0c;随着图片的增加&#xff0c;Word文档的大小可能会急剧增加&#xff0c;导致文件变得庞大&#xff0c;不便于传输和共享。针对这个问题&#xff0c;本文…

67-箭头函数,new.target,模版字符串

1.箭头函数 ES6新增语法&#xff0c;用来简化函数的书写()>{} <script>//箭头函数的基本使用let a (a,b)>{return ab;}let c a(1,2);console.log(c);//输出3</script> 2.简写形式&#xff1a; 2.1参数&#xff1a;只有一个参数时可以省略小括号a>{}&…

面试经典 150 题 ---- 轮转数组

面试经典 150 题 ---- 轮转数组 轮转数组方法一&#xff1a;使用额外的数组方法二&#xff1a;数组翻转 轮转数组 方法一&#xff1a;使用额外的数组 我们可以使用额外的数组来将每个元素放至正确的位置。用 n 表示数组的长度&#xff0c;我们遍历原数组&#xff0c;将原数组…

【算法】长短期记忆网络(LSTM,Long Short-Term Memory)

这是一种特殊的循环神经网络&#xff0c;能够学习数据中的长期依赖关系&#xff0c;这是因为模型的循环模块具有相互交互的四个层的组合&#xff0c;它可以记忆不定时间长度的数值&#xff0c;区块中有一个gate能够决定input是否重要到能被记住及能不能被输出output。 原理 黄…

37.云原生之springcloud+k8s+GitOps+istio+安全实践

云原生专栏大纲 文章目录 准备工作项目结构介绍配置安全测试ConfigMapSecret使用Secret中数据的方式Deployment使用Secret配置Secret加密 kustomize部署清单ConfigMap改造SecretSealedSecretDeployment改造Serviceistio相关资源DestinationRuleGatewayVirtualServiceServiceAc…

132557-72-3,2,3,3-三甲基-3H-吲哚-5-磺酸,具有优异的反应活性和光学性能

132557-72-3&#xff0c;5-Sulfo-2,3,3-trimethyl indolenine sodium salt&#xff0c;2,3,3-三甲基-3H-吲哚-5-磺酸&#xff0c;具有优异的反应活性和光学性能&#xff0c;一种深棕色粉末 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;132557-72-3&#xff0c;5…

ROS2体系框架

文章目录 1.ROS2的系统架构2.ROS2的编码风格3.细谈初始化和资源释放4.细谈配置文件5.ROS2的一些命令6.ROS2的核心模块6.1 通信模块6.2 功能包6.3 分布式6.4 终端命令和rqt6.5 launch6.6 TF坐标变换6.7 可视化RVIZ 1.ROS2的系统架构 开发者的工作内容一般都在应用层&#xff0c;…

MySQL学习Day24—数据库的设计规范

一、数据库设计的重要性: 1.糟糕的数据库设计产生的问题: (1)数据冗余、信息重复、存储空间浪费 (2)数据更新、插入、删除的异常 (3)无法正确表示信息 (4)丢失有效信息 (5)程序性能差 2.良好的数据库设计有以下优点: (1)节省数据的存储空间 (2)能够保证数据的完整性 …

力扣138.随机链表的复制

给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

《TCP/IP详解 卷一》第9章 广播和组播

目录 9.1 引言 9.2 广播 9.2.1 使用广播地址 9.2.2 发送广播数据报 9.3 组播 9.3.1 将组播IP地址转换为组播MAC地址 9.3.2 例子 9.3.3 发送组播数据报 9.3.4 接收组播数据报 9.3.5 主机地址过滤 9.4 IGMP协议和MLD协议 9.4.1 组成员的IGMP和MLD处理 9.4.2 组播路由…

可用于智能客服的完全开源免费商用的知识库项目

介绍 FastWiki项目是一个高性能、基于最新技术栈的知识库系统&#xff0c;专为大规模信息检索和智能搜索设计。利用微软Semantic Kernel进行深度学习和自然语言处理&#xff0c;结合.NET 8和MasaBlazor前端框架&#xff0c;后台采用.NET 8MasaFrameworkSemanticKernel&#xff…

【InternLM 实战营笔记】基于 InternLM 和 LangChain 搭建MindSpore知识库

InternLM 模型部署 准备环境 拷贝环境 /root/share/install_conda_env_internlm_base.sh InternLM激活环境 conda activate InternLM安装依赖 # 升级pip python -m pip install --upgrade pippip install modelscope1.9.5 pip install transformers4.35.2 pip install str…

【大厂AI课学习笔记NO.53】2.3深度学习开发任务实例(6)数据采集

这个系列写了53期了&#xff0c;很多朋友收藏&#xff0c;看来还是觉得有用。 后续我会把相关的内容&#xff0c;再次整理&#xff0c;做成一个人工智能专辑。 今天学习到了数据采集的环节。 这里有个问题&#xff0c;数据准备包括什么&#xff0c;还记得吗&#xff1f; 数…

接口测试实战--mock测试、日志模块

一、mock测试 在前后端分离项目中,当后端工程师还没有完成接口开发的时候,前端开发工程师利用Mock技术,自己用mock技术先调用一个虚拟的接口,模拟接口返回的数据,来完成前端页面的开发。 接口测试和前端开发有一个共同点,就是都需要用到后端工程师提供的接口。所以,当…

书生·浦语大模型图文对话Demo搭建

前言 本节我们先来搭建几个Demo来感受一下书生浦语大模型 InternLM-Chat-7B 智能对话 Demo 我们将使用 InternStudio 中的 A100(1/4) 机器和 InternLM-Chat-7B 模型部署一个智能对话 Demo 环境准备 在 InternStudio 平台中选择 A100(1/4) 的配置&#xff0c;如下图所示镜像…

Spring常见面试题知识点总结(三)

7. Spring MVC&#xff1a; MVC架构的概念。 MVC&#xff08;Model-View-Controller&#xff09;是一种软件设计模式&#xff0c;旨在将应用程序分为三个主要组成部分&#xff0c;以实现更好的代码组织、可维护性和可扩展性。每个组件有着不同的职责&#xff0c;相互之间解耦…

YOLO算法

YOLO介绍 YOLO&#xff0c;全称为You Only Look Once: Unified, Real-Time Object Detection&#xff0c;是一种实时目标检测算法。目标检测是计算机视觉领域的一个重要任务&#xff0c;它不仅需要识别图像中的物体类别&#xff0c;还需要确定它们的位置。与分类任务只关注对…