开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 22 天,点击查看活动详情
作者: 千石
支持:点赞、收藏、评论
欢迎各位在评论区交流
前言
本文内容来自我平时学习的一些积累,如有错误,还请指正
在题目实战部分,我将代码实现和代码解释设置在了解题思路的下方,方便各位作为参考刷题
一些话
本文内容来自我平时学习的一些积累,如有错误,还请指正
正文
动态数组是指在声明时没有确定数组大小的数组,即忽略方括号中的下标;当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小。动态数组是容量可以变化的数组,它支持普通数组支持的所有操作,并额外支持扩容操作。
动态数组与静态数组相比,具有更大的灵活性和可扩展性。
Python可以通过内置函数或自定义类实现动态数组。 内置函数包括append()、extend()、insert()等。 自定义类需要实现数组的基本操作,如增删改查等。 由于Python的内存管理机制,Python中的列表已经是动态数组了,因此不需要手动实现动态数组。
代码实现
class DynamicArray:
def __init__(self):
self.array = []
self.capacity = 0
self.length = 0
def append(self, value):
if self.length == self.capacity:
new_capacity = max(1, 2 * self.capacity)
new_array = [None] * new_capacity
for i in range(self.length):
new_array[i] = self.array[i]
self.array = new_arrayself.capacity = new_capacity
self.array[self.length] = value
self.length += 1
def __getitem__(self, index):
if index < 0 or index >= self.length:
raise IndexError("Index out of range")
return self.array[index]
def __setitem__(self, index, value):
if index < 0 or index >= self.length:
raise IndexError
优缺点
优点:
-
可以动态定义数组大小,而静态数组的大小是固定的
-
在堆空间,理论上内存越大就可以申请越大的数组
-
不需要考虑溢出问题
缺点:
-
和链表相比,链表可以适应数据动态增减的情况,方便插入、删除数据项
-
静态分配是在编译时完成的,当你知道数组大小时使用;而动态分配按需分配内存,没有额外成本