python实现动态数组
数组是一种顺序存储的线性表, 所有元素的内存地址都是连续的。
在很多编程语言中,数组是无法动态修改容量,因此实际开发中我们希望数组的容量是动态变化的。
import ctypes
class DynamicArray:
def __init__(self):
''' Create an empty array'''
self._n = 0 # size大小
self._capacity = 10 # 开始的容量
self._A = self._make_array(self._capacity)
def __len__(self):
return self._n
def isEmpty(self):
return self._n == 0
def __getitem__(self, item):
if not 0 <= item < self._n:
raise ValueError('invalid index')
return self._A[item]
def append(self, obj):
if self._n == self._capacity:
self._resize(2 * self._capacity)
self._A[self._n] = obj
self._n += 1
def set(self, k, value):
if self._n < k:
raise ValueError('no index')
self._A[k] = value
def _make_array(self, c):
return (c * ctypes.py_object)()
def _resize(self, c):
B = self._make_array(c)
for k in range(self._n):
B[k] = self._A[k]
self._A = B
self._capacity = c
def insert(self, k, value):
if self._n == self._capacity:
self._resize(2 * self._capacity)
for j in range(self._n, k, -1):
self._A[j] = self._A[j - 1]
self._A[k] = value
self._n += 1
def remove(self, value):
for k in range(self._n):
if self._A[k] == value:
for j in range(k, self._n - 1):
self._A[j] = self._A[j + 1]
self._A[self._n - 1] = None
self._n -= 1
return None
raise ValueError('value not Found')
def _print(self):
for i in range(self._n):
print(self._A[i], end=' ')
print()
def clear(self):
self._n = 0