实现一个array
#用 list 实现 Array ADT
#因为在别的语言中,array是定长的,因此我们在此,通过List来实现一个定长的数组
这几个魔术方法,能不能会,能不能顶住
# 用 list 实现 Array ADT
# 因为在别的语言中,array是定长的,因此我们在此,通过List来实现一个定长的数组
# 这几个魔术方法,能不能会,能不能顶住
class Array():
def __init__(self, size) -> None:
self.__size = size
self.__item = [None] * size
def __getitem__(self, index):
return self.__item[index]
def __setitem__(self,key, value):
self.__item[key] = value
def __len__(self):
return self.__size
def clear(self, value = None):
for i in range(len(self.__size)):
self.__item[i] = value
def __iter__(self):
for v in self.__item:
yield v
if __name__ == '__main__':
a = Array(10)
a[0] = 10
a[2] = 20
print(len(a))
print(a.__len__())
print("0------------------0")
for aa in a:
print(aa)
单链表
增加新数据时,将新数据的地址与谁关联,这个代表tail的未知,或者说起到尾指针的作用,和c语言不一样,他这里走的时无头结点,所以append的分了if else
class Node:
def __init__(self,value,next=None) -> None:
self.value = value
self.next = next
def __str__(self) -> str:
return 'Node:{}'.format(self.value)
class LinkedList():
def __init__(self) -> None:
self.root = Node()
#记录有多少元素
self.size = 0
#增加新数据时,将新数据的地址与谁关联,这个代表tail的未知,或者说起到尾指针的作用,和c语言不一样,他这里走的时无头结点,所以append的分了if else
self.next = None
def append_first(self, value):
# 头插法
node = Node(value=value)
# 判断是否以及有数据
if not self.next: # 如果么米有节点时
self.root.next = node # 将新节点挂到root后面
else:
temp = self.next.next # 获取原来root后面的那个节点
self.next.next = node # 将新的节点挂到root上
node.next = temp
self.size += 1
def __iter__(self):
current = self.root.next
if current:
while current is not self.next:
yield current.Value
current = current.next
yield current.value
def find(self, value):
for v in self.__iter__():
if v == value:
return True
def find2(self,value):
current = self.root.next
if current:
while current is not self.next:
if current.value == value:
return current
current = current.next
def remove(self,value):
current = self.root.next
if current:
while current is not self.next:
if current.value == value:
temp.next = current.next
del current
self.size -= 1
return True
temp = current
current = current.next
if __name__ == "__main__":
link = LinkedList()
link.append('孙悟空')
link.append('猪八戒')
link.append_first('唐僧')
for v in link:
print(v)
# print(link.find('孙悟空'))
# print(link.find('六儿猕猴'))
# print(link.find2('孙悟空'))
# print(link.find2('六儿猕猴'))
print('-'*30)
link.remove('孙悟空')
for v in link:
print(v)
双向链表
待续