不调用API在数组的指定位置插入元素
首先明白两个概念
- 向量
- 数组
数组
数组中的元素 A [ i ] A[i] A[i] 的物理地址可以通过公式$ A + i*s $ 推导出来,显然这是线性的存储结构,因此被称作:线性数组。
向量
邓工总结:向量是数组的进一步抽象,里面的元素类型不再只是基本的数据类型,可以是定制的数据类型。
个人理解,向量就是一些更复杂的基本单位组成的数组
在明白这两个基本概念之后,再来理解题目中的插入操作
插入操作
在位置为r的地方,插入元素e,用一句话概括为
e在秩为r的地方插入,原后继元素依次后移。
这里关键的地方在于要把数组和其实际的储存结构对应起来,即:元素的位置和物理上的储存位置是一一对应的,一个元素对应着一个物理储存单元,要在前面插入一个元素,那么在这个位置上就要有空位,所以后续的元素要后移腾出一个空位。
编程思路
流程
- 找到要插入索引所在位置
- 将原来索引上以及索引以后的元素都往后挪一个位置,使得索引位置为空
- 将值放在索引处
要考虑的问题
- 索引分析
因为python是支持负数索引的,所以要考虑到多种情况
1.正数索引值大于数组长度放置于末尾
2.负数索引值大于数组长度放置于开头
3.负数索引值小于数组长度,则用index+len(list)处理
- None值的考虑
若插入位置刚好是None值,则直接替换
- 数组的扩容
如果原本数组已满, 再插入一个元素时,必须重新开辟更大的内存空间。常见的扩容策略:size加倍。下面的代码,扩容策略亦是如此。也可以采用加一
class MyArray(object):
def __init__(self, list1):
self.size = len(list1