顺序表中增加元素
在尾部增加元素:时间复杂度为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)