使用Python语言实现一个基于动态数组的序列队列

news2024/11/14 15:08:58

一、动态数组的实现

  •         首先,我们需要创建一个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.coloradmin.cn/o/1481637.html

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

相关文章

【rust】10 project、crate、mod、pub、use、项目目录层级组织、概念和实战

文章目录 一、项目目录层级组织概念1.1 cargo new 创建同名 的 Project 和 crate1.2 多 crate 的 package1.3 mod 模块1.3.1 创建嵌套 mod1.3.2 mod 树1.3.3 用路径引用 mod1.3.3.1 使用绝对还是相对? 1.3.4 代码可见性1.3.4.1 pub 关键字1.3.4.2 用 super 引用 mod1.3.4.3 用…

Mathtype安装时word启动显示“文件未找到:MathPage.WLL”

背景 由于老板布置的临时工作&#xff0c;需要安装Mathtype&#xff0c;但尝试了3个不同的版本后&#xff08;每次都卸载干净了&#xff09;&#xff0c;均未能成功安装&#xff0c;出现的报错3个版本各不相同&#xff1a; ①解压安装过程中失败&#xff08;这个版本不再尝试…

数据可视化原理-腾讯-热力图

在做数据分析类的产品功能设计时&#xff0c;经常用到可视化方式&#xff0c;挖掘数据价值&#xff0c;表达数据的内在规律与特征展示给客户。 可是作为一个产品经理&#xff0c;&#xff08;1&#xff09;如果不能够掌握各类可视化图形的含义&#xff0c;就不知道哪类数据该用…

MySQL、高级SQL操作

学习数据库的目的 岗位需求、大数据时代、被迫需求&#xff0c;存数据 数据库是所有软件体系中最核心的存在 数据库 DB DB dataBase 数据仓库&#xff0c;软件&#xff0c;安装在window、linux、mac上&#xff0c;可以存储大量数据&#xff0c;500w 作用&#xff1a;存储数据…

docker的数据卷和docker的自定义镜像

docker的数据卷和docker的自定义镜像 1.docker的数据卷1.1创建 docker volume create 数据卷名称1.2 查看数据卷docker volume ls1.3 删除一个volume 2.将宿主机的目录与容器的目录进行挂载&#xff0c;实现数据共享2.1数据卷相互共享 3.自定义镜像3.1编辑Dockerfiile文件 vim …

位运算第二弹

力扣191.位1的个数 public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int ret0;while(n!0){n(n&n-1);ret;}return ret;} } 推荐是自己去手动推一下&#xff0c;深刻理解一下&#xff0c;什么叫做最右侧的1。 力扣338.…

3694-51-7,3,5-Dinitro-1,2-phenylenediamine,合成其他化合物的重要中间体

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;3694-51-7&#xff0c;3,5-Dinitro-1,2-phenylenediamine&#xff0c;3,5-二硝基-1,2-苯二胺;3,5-二硝基苯-1,2-二胺 一、基本信息 【产品简介】&#xff1a;3,5-Dinitro-1,2-phenylenediamine, with the molecular…

MySql出现无法正常启动(0x000007b)的快速解决

目录 1.背景介绍 2.解决方案 1.背景介绍 昨天在清理电脑内存空间的时候&#xff0c;不小心将一些重要的系统组件删除&#xff0c;导致无法正常启动mysql&#xff0c;一开始是提示经过msvcp120.dll&#xff0c;于是找到下载dll的网站将组件补充进system&#xff0c;但随后又提…

【办公类-25-01】20240304 UIBOT上传 ”班级主页-信息窗“

一、背景需求&#xff1a; 本学期制作了 “信息窗主题说明”合并A4内容 【办公类-22-07】周计划系列&#xff08;3-1&#xff09;“信息窗主题知识&#xff08;提取&#xff09;” &#xff08;2024年调整版本&#xff09;-CSDN博客文章浏览阅读797次&#xff0c;点赞7次&…

渗压计使用中的常见问题及其解决方案

渗压计作为一种用于测量土壤或岩石中孔隙水压力的重要工具&#xff0c;在地质工程和水文学领域具有广泛的应用。然而&#xff0c;在实际使用过程中&#xff0c;渗压计可能会遇到多种常见问题&#xff0c;这些问题不仅影响测量精度&#xff0c;还可能对设备本身造成损害。本文将…

【力扣】207.课程表(图)

依旧还是有关于图的题目&#xff0c;这次不一样的点在于题目并没有明确的给出他是图的题目的形式&#xff0c;而是说让你根据其题目意思来进行操作。 首先&#xff0c;就是搞清楚题目的意思。假设你想学习A课程&#xff0c;那就是必须先学习B课程&#xff0c;但是这里给出的例…

消息队列+更新DB极易引发的DB并发修改bug

背景 我们在生产系统中和其他系统进行交互时一般都会通过消息队列来解耦生产者和消费者&#xff0c;然后通过每个使用方消费消息队列的消息的方式来完成消息的消费&#xff0c;并且一般来说我们消费消息后极有可能会操作DB&#xff0c;不过这种方式如果处理不够仔细&#xff0…

Linux——进程控制(一)进程的创建与退出

目录 一、进程创建 1.写时拷贝 2.创建多个进程 二、进程终止 1.main函数的返回值 2.bash中的$? 3.自定义退出码 4.C语言的错误码 5.错误码与退出码的区别 6.代码异常终止 7.exit函数 8.总结 一、进程创建 在之前&#xff0c;我们学过linux中的非常重要的函数——…

全网爆火的 MBTI 测试,是隐藏的割韭菜工具?

小伙伴们&#xff0c;谁能想到&#xff0c;作为一名冲浪老手&#xff0c;果子在网上又被骗了。 事情是这样的&#xff0c;前几天&#xff0c;我刷微博&#xff0c;看到一个推荐&#xff0c;大概如下图&#xff0c;是一个 MBTI 人格测试。 MBTI 测试&#xff0c;果子早就做过了…

【前端素材】推荐优质在线电影院商城电商网页Hyper平台模板(附源码)

一、需求分析 1、系统定义 在线电影商城是指一个通过互联网提供电影服务的平台&#xff0c;用户可以在该平台上浏览电影资源、租借或购买电影&#xff0c;以及观看在线影片。 2、功能需求 在线电影商城是指一个通过互联网提供电影服务的平台&#xff0c;用户可以在该平台上…

Windows Docker 部署 Redis

部署 Redis 打开 Docker Desktop&#xff0c;切换到 Linux 内核。然后在 PowerShell 执行下面命令&#xff0c;即可启动一个 redis 服务。这里安装的是 7.2.4 版本&#xff0c;如果需要安装其他或者最新版本&#xff0c;可以到 Docker Hub 中进行查找。 docker run -d --nam…

2.25_模式识别大作业的三种方法

filename sys.argv[1] df pd.read_csv(filename,index_col["ID"]) ax df.plot() ax.set_xlabel("Data_ID") ax.set_ylabel("load_value") plt.show() 这段代码是用来读取一个CSV文件&#xff0c;并将文件中的数据绘制成一个简单的折线图。 在…

lv20 QT 常用控件 2

1 QT GUI 类继承简介 布局管理器 输出控件 输入控件 按钮 容器 2 按钮示例 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLineEdit> #include <QPushButton>class Widget : public QWidget {Q_OBJECTpublic…

【C语言】常见的动态内存管理错误

前言 上一篇介绍了C语言中 动态内存管理函数&#xff0c;本片讲解的是 在我们使用动态内存管理时 常见的错误&#xff0c;一起来看看吧~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 1.对NULL指针的解引⽤操作 错…

如何高效管理项目:从规划到执行

导语&#xff1a;项目管理是一项复杂而重要的工作&#xff0c;涉及多个方面&#xff0c;包括规划、执行、监控和收尾。本文将介绍如何高效管理项目&#xff0c;从规划到执行&#xff0c;帮助您成功完成项目目标。 一、项目规划 项目规划是项目成功的关键。在规划阶段&#xff0…