数组:将数据元素顺序的存储在一片连续的存储区里,元素之间的顺序关系由它们的存储顺序决定
数组最大的优点:可以快速查询
自定义一个数组
静态数组的实现
静态数组是指数组的容量是固定的,
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