python实现数组(数据结构与算法之美)

        在编程语言中,数组不仅是一种基本的数据类型,也是一种基础的数据结构,它用于存储相同类型的数据,支持随机访问,时间复杂度为O(1),并且也支持随机插入和删除,但是时间复杂度为O(n)。

        数组之所以能够进行随机访问,是因为当你在申请一个数组的时候,计算机给它分配了一块连续的存储空间,你只需要知道这个数组的首地址,就可以在O(1)时间复杂度内找到数组中的任意数据,具体的推导过程可以查看王争的数据结构与算法之美。但是插入和删除操作的平均时间复杂度为O(n),因为数组的插入和删除操作要进行数据搬迁,需要耗费主要的时间复杂度,具体的推导也可以自己去了解,本专栏是根据王争的数据结构与算法用python实现的,所以大部分精力会放在代码的实现上面,对于时间复杂度详细的推导过程需要你自己去了解。

        在代码的实现过程中,我们首先需要创建一个数组类,将数组的初始化信息和所需要使用的方法都封装在这个类中。在创建一个数组时,我们需要指定数组的容量,所以要把容量作为参数传入初始化函数中。在python中,列表的内存空间是连续的,我们可以在初始化函数中定义一个列表来存储数组中的数据。这里要注意一点,虽然python中的列表和C语言中的数组的内存空间都是连续的,但是列表可以存储不同类型的变量,而数组只能存储同一类型的变量,他们有相似之处,但是并不相同。

def __init__(self, capacity: int):
    self.data = []  # 用一个列表存储数组的数据
    self.capacity = capacity  # 在创建数组时,需要指定容量

        对数组进行的操作通常有4种,插入操作、删除操作、查找操作、打印操作。在进行插入操作时,我们要指定插入位置(索引)和插入值,需要作为参数传入插入方法。执行插入操作时,首先要判断数组是否还有剩余空间,如果有就执行插入操作,这里调用python对于列表操作的内置函数insert方法,时间复杂度为O(n),满足我们的要求;如果没有剩余空间就提示用户,并且不进行插入操作。

def insert(self, index: int, value: int):
    if len(self.data) < self.capacity:  # 容量没满就可以插入
        self.data.insert(index, value)  # 列表的insert方法平均时间复杂度为O(n)
    else:
        print("插入超出数组容量")

        删除操作:删除指定位置的值,需要将索引传入删除函数。如果索引小于数组容量,利用python内置的pop方法执行删除操作,时间复杂度为O(n),否则提示用户索引越界。这里用到python的异常处理方法,try和except,try后面的代码成功执行,就返回,不然就执行except,读者可以自行去了解更具体的操作。

def delete(self, index):
    try:
        self.data.pop(index)  # 列表的pop方法平均时间复杂度为O(n)
    except IndexError:
        print("删除索引越界")

        查找操作:输入要查找的索引,返回索引位置的值。传入索引,如果索引小于数组容量就返回所查找位置的值,否则提示用户越界。

def find(self, index):
    try:
        return self.data[index]  # 时间复杂度为O(1)
    except IndexError:
        print("查找索引越界")

        打印操作:逐个打印数组中的值。这里用一个for循环。

def print_all(self):
    for item in self.data:  # self相当于类实例化的对象
        print(item)

        创建数组对象,编写程序入口,进行测试,完整代码如下:

class Array(object):
    def __init__(self, capacity: int):
        self.data = []  # 用一个列表存储数组的数据
        self.capacity = capacity  # 在创建数组时,需要指定容量

    def insert(self, index: int, value: int):
        if len(self.data) < self.capacity:  # 容量没满就可以插入
            self.data.insert(index, value)  # 列表的insert方法平均时间复杂度为O(n)
        else:
            print("插入超出数组容量")

    def delete(self, index):
        try:
            self.data.pop(index)  # 列表的pop方法平均时间复杂度为O(n)
        except IndexError:
            print("删除索引越界")

    def find(self, index):
        try:
            return self.data[index]  # 时间复杂度为O(1)
        except IndexError:
            print("查找索引越界")

    def print_all(self):
        for item in self.data:  # self相当于类实例化的对象
            print(item)


arr = Array(5)  # 创建一个容量为5的数组


if __name__ == '__main__':
    arr.insert(0, 3)
    arr.insert(0, 5)
    arr.insert(1, 7)
    arr.insert(3, 9)
    arr.insert(4, 10)
    arr.insert(5, 2)
    print("找到", arr.find(2))
    arr.delete(6)
    arr.print_all()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NangoGreen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值