算法—顺序表之列表的扩容机制(python实现)

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 算法—顺序表之列表的扩容机制(python实现),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

顺序表中增加元素
在尾部增加元素:时间复杂度为O(1)
在这里插入图片描述
在任意位置插入元素:时间复杂度为O(n)
在这里插入图片描述
顺序表中删除元素

删除尾部元素:时间复杂度为O(1)
删除任意位置元素:时间复杂度为O(n)

PY_SSIZE_T_MAX=float('inf')     #最大的容量
obj_size=1
class List:
    allocated=0		#容量默认为0
    size=0			#元素个数默认为0
    items=[]		#数据区默认为空
    def list_resize(self,new_size):
        '''
        self:列表本身对象
        :param new_size:修改之后的元素个数
        :return:
        '''
        allocated=self.allocated       #获取列表对象当前的容量
        #allocated>>1==>allocated//2
        if allocated>=new_size and new_size>=(allocated>>1):
            self.size=new_size
            return 0
        #计算需要的内存容量时多少
        new_allocated=new_size+(new_size>>3)+(3 if new_size<9 else 6)
        if new_allocated>PY_SSIZE_T_MAX:    #判断是否超过了最大值
            return -1

        if new_size==0:
            new_allocated=0

        #计算我们容量需要的字节数
        num_allocated_bytes=new_allocated*obj_size
        #获取到新的内存空间的地址
        items=addr(self.items,num_allocated_bytes)
        if items==None:
            return -1
        #让列表对象的数据区地址指向新的内存空间地址
        self.items=items
        self.size=new_size
        self.allocated=allocated

lst=List()
result=lst.list_resize(4)
print(result)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123557.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!