python - 完整的 Python 类
问题描述
我正在做一项任务,但进展并不顺利。这是我的代码不是很好:
from dataclasses import dataclass
@dataclass
class Node:
value: int = None
nxt: Node = None
@dataclass
class Deque:
head: Node = None # First node in queue
tail: Node = None # Last node in queue
size: int = 0
def add_first(self, n):
new = Node(n, None)
if self.head is None:
self.head = new
self.tail = new
self.size += 1
s = "{ "
node = self.head
while node is not None:
s += str(node.value) + " "
node = node.nxt
s += "}"
return s
def add_last(self, n):
new = Node(n, None)
if self.head is None:
self.head = new
self.tail = new
else:
self.tail.nxt = new
self.tail = new
self.size += 1
def get_last(self):
if self.tail is None:
print("Get can't be applied on an empty list")
return None
else:
return self.tail.value
def get_first(self):
if self.head is None:
print("Get can't be applied on an empty list")
return None
else:
#node = self.head
return self.head.value
def remove_first(self):
if self.head is None:
print("Remove can't be applied on an empty list")
elif self.head == self.tail:
s = self.head.value
self.head = None
self.tail = None
self.size -= 1
return s
elif self.size == 1:
node = self.head
self.head = self.head.nxt
self.size -= 1
return node.value
输出:{ 1 2 3 4 5 6 7 8 9 10 } 尺寸:10 { 20 19 18 17 16 15 14 13 12 11 1 2 3 4 5 6 7 8 9 10 } 尺寸:20
更新:我找到了我的问题的答案。这是关于 def add_first 和 def remove last 以及 def remove first 的问题。
解决方案
因为这是家庭作业,所以我不会给出固定的代码,但我会指出需要修复的地方。我相信我找到了所有必需的修复程序,但我可能是错的,因为您没有共享用于测试双端队列的代码:
- 您的
add_first
方法不必要地遍历所有节点,然后将最后一个节点(tail
)的nxt
值设置为新节点,这意味着新节点将出现在双端队列的末尾。相反,您需要做的就是将nxt
新节点的 设置为 currenthead
,然后设置head
为新节点。 - 除非双端队列中有一个节点,否则您
remove_first
不考虑任何情况。在所有其他情况下,您必须将 Deque 设置head
为其旧 节点。head
nxt
- 除非双端队列中有一个节点,否则您
remove_last
也不会考虑任何情况。在所有其他情况下,您必须遍历 Deque 的节点,从 开始head
,直到找到一个nxt
值为 Deque 的节点tail
,然后将其设置nxt
为 None,并将 Deque 的tail
设置为该节点。
在节点之前查找节点的示例tail
:node = self.head while node.nxt != self.tail: node = node.nxt node.nxt = None self.tail = node
推荐阅读
- elasticsearch - Elasticsearch 模糊查询命中比直接命中更相关
- excel - 输入互易 METRIC <---> IMPERIAL
- swift - 如何将匿名方法传递给在 Swift 中捕获上下文的闭包?
- azure - Azure Function IWebJobsStartup 实现中的 ExecutionContext
- c# - Azure webjob 日志在 Kudu 中中止,即使继续运行
- graphql - Prisma 未在 WhereInput 中为字符串数组生成字段
- python - Django:如何仅获取与属于登录用户的区域匹配的记录?
- onem2m - oneM2M 中的固件更新和管理
- php - Mysql在搜索期间排除百分号 - 可重用脚本
- html - 删除表单行 symfony/twig 中的表单控件