为什么只有revers__iter__()有用到Node里面的__str__方法,显示了Node:加名字的信息,也没有看到对__str__方法的调用,为什么会显示出其中的格式啊
老师,本节课的代码pop方法只是提供了返回值,但并没有删除内容,如果要是继续pop的话还是会弹出之前的内容。
class Array: def __init__(self,size=4): self.__size = size self.__item = [None]*size self.length = 0 def __setitem__(self,key,value): self.__item[key] = value self.length += 1 def __getitem__(self,key): return self.__item[key] def __len__(self): return self.length def __iter__(self): for value in self.__item: yield value class Queue: def __init__(self,size=4): self.__item = Array(size) self.size = size self.head = 0 self.end = 0 def put(self,value): self.__item[self.head]= value self.head += 1 if self.head == self.size: self.head = 0 def pop(self): temp = self.__item[self.end] self.end += 1 if self.end == self.size: self.end = 0 return temp if __name__ == '__main__': q = Queue() q.put('唐三藏') q.put('孙悟空') q.put('猪八戒') print(q.pop()) print(q.pop()) print(q.pop()) print(q.pop()) print(q.pop()) print(q.pop()) print(q.pop()) print(q.pop())
def remove(self,value): prev = self.root for n in self.__iter__(): if n.value == value: if not n.next: self.next = prev # 这里不能直接break,因为self.size没有减1 else: prev.next = n.next self.size-=1 prev = n
老师,请问如果我这样写,就是把删除的节点脱离了链,那请问被删除的节点会被垃圾回收吗
self.__item = [None]*size,老师说是分配空间,没太看懂
老师我这个代码也是可以的吧
if self.count > right:
if self.item[right] > self.item[left] and self.item[right] > self.item[laget]:
laget = right
elif self.item[left] > self.item[right] and self.item[left] > self.item[laget]:
laget = left
elif left < self.count:
if self.item[left] >self.item[index]:
if laget != index:
self.item[index],self.item[laget] = self.item[laget],self.item[index]
self.siftdown(laget)
老师,为什么 右节点不能等于长度呢
def quick_sort(args):
if len(args) == 1:
return args
min = args[len(args)//2]
left = [x for x in args if x < min]
right = [x for x in args if x > min]
return kuai_su(left) + [min] +kuai_su(right)
老师,为啥 数组长度的判断是等于1再返回数组 他会报越界的错
老师我不太明白这里,为啥将23替换上去之后要把他原来的父节点置为空
想问下删除为什么运行效率高,比如一个列表,你要删除中间一个元素,那后面的元素不是要全部往前移一位。还是说删除之后那个位置就空在那里了,其他元素位置不变。
老师,这个线式队列,当put()进去超过size的数后,就不符合FIFO了
你看看测试结果
class Array(): def __init__(self,size=4): self.__size = size # 记录容器大小 self.__item = [None]*size # 分配空间 self.__length = 0 def __setitem__(self,key,value): self.__item[key] = value self.__length += 1 def __getitem__(self,key): return self.__item[key] def __len__(self): return self.__length def __iter__(self): for value in self.__item: yield value class Queue(): def __init__(self,size=4): self.item = Array(size) self.size = size self.head = 0 self.end = 0 def put(self,value): self.item[self.head % self.size] = value self.head += 1 def pop(self): temp = self.item[self.end % self.size] self.end += 1 return temp if __name__ == "__main__": #q = Queue() #q.put('曹操') #q.put('刘备') #q.put('孙权') #print(q.pop()) #print(q.pop()) #print(q.pop()) q = Queue() for i in range(1, 6): q.put(i) for i in range(q.size): print(q.pop())
class Node(): def __init__(self, value=None,prev=None, next=None): self.value = value self.prev = prev self.next = next def __str__(self): return 'Node:{}'.format(self.value) class DoubleLinkList(): def __init__(self): self.root = Node() self.end = None self.size = 0 def append(self, value): node = Node(value) # 判断是否存在数据 if not self.end: # 如果不存在元素 self.root.next = node # 将root的下一个节点,设置为新的node节点 node.prev = self.root # 将node新节点的上一节点设置为root else: self.end.next = node # 将原来的最后一个节点设置为新的node节点 node.prev = self.end # 将新的node节点的 上一节点设置为原来的最后一个节点 self.end = node # 更新最后一个节点为新加的node节点 self.size += 1 def append_first(self, value): node = Node(value) #判断是否存在数据 if not self.end: self.end = node # 将新节点设置为最后一个节点 else: temp = self.root.next # 先保存原来的第一个节点 node.next = temp # 新节点的 下一个节点 设置为 原来的第一个节点 temp.prev = node # 原来第一个节点的 上一个节点 设置为 新的节点 node.prev = self.root # 设置新的节点的上一节点为 root节点 self.root.next = node # 将新的节点挂在root上 self.size += 1 def __iter__(self): current = self.root.next if current: while current is not self.end: yield current.value current = current.next yield current.value def revers_iter(self): current = self.end # 获取最后一个节点 if current: while current is not self.root: yield current current = current.prev def remove_first(self): if self.end: # 如果存在节点 temp = self.root.next # 获取第一个节点 self.root.next = temp.next # 把第二个节点设置为root 的下一个节点 if temp.next: # 如果存在第二个节点 temp.next.prev = self.root # 第二个节点的 上一个节点为root return temp class Queue(): def __init__(self, size=4): self.item = DoubleLinkList() self.size = size self.length = 0 def put(self, value): self.item.append(value) self.length += 1 def pop(self, value): if self.length <= 0: return 'Null' self.length -= 1 return self.item.remove_first() def empty(self, value): if __name__ == "__main__": q = Queue() q.put('嫦娥') q.put('唐三藏') q.put('天蓬元帅') print(q.pop()) print(q.pop()) print(q.pop()) print(q.pop())
老师帮我看看这是什么错误?自己也查了,概率一下,挺蒙的!
代码敲完为什么这个self给我报错了?。。。。。。。。
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637