数据结构与算法----学习笔记(2)数组理论部分

本文探讨数组的概念,强调其快速查询的优势。详细介绍了如何自定义静态和动态数组,动态数组的时间复杂度分析,包括增删、改查的操作。文章特别提到了动态数组的均摊复杂度为O(1),并讨论了复杂度震荡现象。同时,还涵盖了Python列表与字典操作的时间复杂度,指出contains操作的时间复杂度为O(1)。
摘要由CSDN通过智能技术生成

数组:将数据元素顺序的存储在一片连续的存储区里,元素之间的顺序关系由它们的存储顺序决定
数组最大的优点:可以快速查询


自定义一个数组

静态数组的实现
静态数组是指数组的容量是固定的,

class Array:
    def __init__(self, capacity=10):
        self._capacity = capacity
        self._size = 0
        self._data = [None] * self._capacity  # 构造一段连续的固定空间

    def __getitem__(self, item):
        # 使数组支持索引操作
        return self._data[item]

    def getSize(self):
        return self._size

    def getCapacity(self):
        return self._capacity

    def isEmpty(self):
        return self._size == 0

    def addLast(self, elem):
        if self._size == self._capacity:
            raise Exception("array已经满了,不能再往里添加元素!")
        self._data[self._size] = elem
        self._size += 1
        # 可以直接调用add函数
        # self.add(self._size,elem)

    def add(self, index, elem):
        if index < 0 or index > self._size:
            raise Exception("索引值错误!")
        if self._size == self._capacity:
            raise Exception("array已经满了,不能再往里添加元素!")
        for i in range(self._size, index, -1):  # 这里i不能到index,只能到inde+1
            self._data[i] = self._data[i - 1]
            # 注意这里就算是插入的位置为0,不能哪种方法实现,都可以,因为range不包含最后一个数
        # for i in range(self._size-1,index-1,-1):
        #     self._data[i+1] = self._data[i]
        self._data[index] = elem
        self._size += 1

    def addFirst(self, elem):
        self.add(0, elem)

    def get(self, index):
        if index < 0 or index >= self._size:
            # 判断索引的时候要列表大小,因为索引值最大为元素长度-1
            raise Exception("索引值错误!")
        return self._data[index]

    def getFirst(self):
        return self.get(0)

    def getLast(self):
        return self.get(self._size - 1)

    def set(self, index, elem):
        if index < 0 or index >= self._size:
            raise Exception("索引错误!")
        self._data[index] = elem

    def contains(self, ele):
        for i in range(self._size):
            if self._data[i] == ele
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值