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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter Text 下划线

IntrinsicWidth(child: Column(mainAxisAlignment:MainAxisAlignment.center,children: [Text("工单名称",style: TextStyle(overflow: TextOverflow.fade,color: AppColors.baseColor,fontSize: 15.sp,// decorationStyle: TextDecorationStyle.dashed),),Container…

PCIE Retimer

1 Retimers retimer是一种PCIE的扩展设备&#xff0c;用于长距离高效地传输数据&#xff0c;起到一种中继器的作用。在EP和RC中间最多允许两级retimers级联&#xff0c;其可以分为纯模拟类&#xff0c;它是一种对物理层协议无关的芯片&#xff1b;另一种便是与物理层交互的芯片…

xsslabs第四关

测试 "onclick"alert(1) 这与第三关的代码是一样的&#xff0c;但是每一关考的点是不一样的所以我们看一下源代码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;ch…

奇安信发布《2024人工智能安全报告》,AI深度伪造欺诈激增30倍

2024年2月29日&#xff0c;奇安信集团对外发布《2024人工智能安全报告》&#xff08;以下简称《报告》&#xff09;。《报告》认为&#xff0c;人工智能技术的恶意使用将快速增长&#xff0c;在政治安全、网络安全、物理安全和军事安全等方面构成严重威胁。 《报告》揭示了基于…

生成式AI与仿真

仿真模型是物理对象、系统或过程的虚拟表示&#xff0c;可预测其在不同场景中的行为和性能。 如今&#xff0c;仿真模型广泛应用于各行各业&#xff0c;以优化流程、为决策提供信息并创建数字孪生。 几十年来&#xff0c;仿真模型一直被用来对复杂的系统和过程进行建模。 这些…

性能测试-CPU使用率过高问题

一、通过jstack排查 1.通过top命令找到cpu占用高的应用程序进程 top 2.通过top -Hp pid查看该应用中占用CPU高的线程 top -Hp 5649 下图中是线程id 3.通过printf "%x\n" [线程id] 将线程高的线程号转为十六进制。 4.通过jstack过滤该十六进制的关键信息。jstack [进程…

阿里云短信发送

阿里云短信 发送短信验证码是现在日常生活中很常见的事务&#xff0c;但相信很多人都只是接受过验证码&#xff0c;并不知道验证码的生成过程&#xff0c;也不知道如何自己创建一个验证码。会简单介绍如何通过阿里云来创建一个验证码短信。 一、首先打开阿里云官网 官网&…

Intel 芯片 Mac 如何重新安装系统

使用可引导安装器重新安装&#xff08;可用于安装非最新的 Mac OS&#xff0c;系统降级&#xff0c;需要清除所有数据&#xff0c;过程确保连接上网络&#xff0c;虽然这种方式不会下载 Mac OS&#xff0c;但是需要下载固件等信息&#xff09; 插入制作好的可引导安装器&#x…

MYSQL--JDBC*

一.介绍: 1.JDBC是一种用于执行SQL于语句的JAVA API,JDBC是一种使用JAVA访问数据库的执行规范标准,能够为不同的数据库提供统一的访问!由一组使用JAVA语言编写的接口以及类组成的 2.JDBC核心的类以及相关的接口主要有: DriverManager 注册驱动 Connection 使用…

【学习心得】Python调用JS的三种常用方法

在做JS逆向的时候&#xff0c;一种情况是直接用Python代码复现JS代码的功能&#xff0c;达成目的。但很多时候这种方法有明显的缺点&#xff0c;那就是一旦JS代码逻辑发生了更改&#xff0c;你就得重写Python的代码逻辑非常不便。于是第二种情况就出现了&#xff0c;我直接得到…

ccadmin - 可免费试用的 FreeSWITCH web管理后台

ccadmin - FreeSWITCH web管理后台 简介免费测试在线预览功能说明 简介 顶顶通呼叫中心中间件Web后台管理系统简称CCAdmin-Web&#xff0c;用于管理和配置顶顶通呼叫中心中间件。因为顶顶通呼叫中心中间件是基于FreeSWITCH开发的&#xff0c;所以CCAdmin本质上也是一个FreeSWI…

【论文精读】DINOv2

摘要 学习与特定任务无关的预训练表示已经成为自然语言处理的标准&#xff0c;这些表示不进行微调&#xff0c;即可在下游任务上明显优于特定任务模型的性能。其主要得益于使用无监督语言建模目标对大量原始文本进行预训练。 遵循NLP中的这种范式转变&#xff0c;以探索计算机视…

C语言第三十三弹---动态内存管理(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 动态内存管理 1、为什么要有动态内存分配 2、malloc和free 2.1、malloc 2.2、free 3、calloc和realloc 3.1、calloc 3.2、realloc 4、常见的动态内存的错…

《Spring Security 简易速速上手小册》第5章 高级认证技术(2024 最新版)

文章目录 5.1 OAuth2 和 OpenID Connect5.1.1 基础知识详解OAuth2OpenID Connect结合 OAuth2 和 OIDC 5.1.2 重点案例&#xff1a;使用 OAuth2 和 OpenID Connect 实现社交登录案例 Demo 5.1.3 拓展案例 1&#xff1a;访问受保护资源案例 Demo测试访问受保护资源 5.1.4 拓展案例…

Redis 【1】—— 安装 与 配置

Redis 【1】—— 安装 与 配置 一、安装 与 配置&#xff08;一&#xff09;使用 yum 安装&#xff08;二&#xff09;创建符号链接1. 软链接2. 相关指令 &#xff08;三&#xff09;修改配置文件&#xff08;四&#xff09;Redis 的启停 一、安装 与 配置 &#xff08;一&…

金融短信群发平台具有那些特点

金融短信群发平台的特点主要包括以下几个方面&#xff1a; 1.高效性&#xff1a;金融短信群发平台能够快速地发送大量的短信&#xff0c;使得金融信息能够迅速传达给目标客户&#xff0c;保证了信息的及时性和有效性。 2.安全性&#xff1a;金融短信群发平台对于信息的安全性非…

MySQL 主从读写分离入门——基本原理以及ProxySQL的简单使用

一、读写分离工作原理 读写分离的工作原理&#xff1a;在大型网站业务中&#xff0c;当单台数据库无法满足并发需求时&#xff0c;通过主从同步方式同步数据。设置一台主服务器负责增、删、改&#xff0c;多台从服务器负责查询&#xff0c;从服务器从主服务器同步数据以保持一…

本届挑战赛冠军方案:基于LLM的多场景智能运维

本文介绍本届挑战赛冠军得主SRE-Copilot团队的参赛方案&#xff1a;基于LLM的多场景智能运维。 基础架构-SRE&#xff0c;负责字节跳动基础架构部门所有组件的SRE工作&#xff0c;沿着成本、稳定性、效率、服务四条主线&#xff0c;致力于打造高扩展、高可用的生产系统。基础架…

2024年【烟花爆竹经营单位安全管理人员】免费试题及烟花爆竹经营单位安全管理人员试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 烟花爆竹经营单位安全管理人员免费试题根据新烟花爆竹经营单位安全管理人员考试大纲要求&#xff0c;安全生产模拟考试一点通将烟花爆竹经营单位安全管理人员模拟考试试题进行汇编&#xff0c;组成一套烟花爆竹经营单…

Linux设置程序任意位置执行(设置环境变量)

问题 直接编译出来的可执行程序在执行时需要写出完整路径比较麻烦&#xff0c;设置环境变量可以实现在任意位置直接运行。 解决 1.打开.bashrc文件 vim ~/.bashrc 2.修改该文件&#xff08;实现将/home/zhangziheng/file/seqrequester/build/bin&#xff0c;路径下的可执…