Task01
数组
- 实现一个支持动态扩容的数组
- 实现一个大小固定的有序数组,支持动态增删改操作
- 实现两个有序数组合并为一个有序数组
链表
- 实现单链表、循环链表、双向链表,支持增删操作
- 实现单链表反转
- 实现两个有序的链表合并为一个有序链表
数组实现如下:
class MyArr:
def __init__(self, *args, size=None, fixed_size=False):
# args : 可指定数组 size : 数组大小 fixed_size : 是否固定数组长度
if not isinstance(fixed_size, bool):
raise TypeError("Fixed_size must be bool")
self.fixed = fixed_size
if args:
self._data = [i for i in args]
if size < len(args):
raise IOError("Size shouldn't be less than the length of args")
else:
if not isinstance(size, int):
raise TypeError("List length must be integer")
self.is_empty = False
self._size = size
none_size = [None] * (self._size - self.length(self._data))
self._data += none_size
else:
if self.fixed:
if not size:
raise IOError("For fixed array,size can't be none")
else:
if not isinstance(size, int):
raise TypeError("List length must be integer")
self.is_empty = True
self._size = size
self._data = [None] * self._size
else:
if not size:
self.is_empty = True
self._size = 0
self._data = [None] * self._size
else:
if not isinstance(size, int):
raise TypeError("List length must be integer")
self.is_empty = True
self._size = size
self._data = [None] * self._size
def __str__(self):
str_res = """
Array: {array}
empty: {empty}
length: {length}
""".format(array=self._data, empty=self.is_empty, length=self._size)
return str_res
@staticmethod
def length(args):
count = 0
for data in args:
if data:
count += 1
return count
@staticmethod
def sort(args):
for i in range(1, len(args)):
count = 0
base = args[i-1]
for data in args[i:]:
count += 1
if data is not None:
if base > data:
c = data
args[count] = base
args[count-1] = c
else:
base = data
else:
raise TypeError("None_type can't be sorted")
def insert(self, index, value):
# index : 插入位置 value : 插入数值
if not isinstance(index, int):
raise TypeError("Index must be integer")
if self.is_empty:
if self.fixed and index + 1 > self._size:
raise IOError("Fixed array is not as long as