在我的CS1课程中,我们目前正在学习python中的单链接列表、堆栈和队列。我们正在做一个例子,向队列添加一个新元素,并相应地将队列的前后引用设置为。我不明白为什么我会得到这个特定的输出。当执行queue.back.next = new_part
时,它只应将queue.back.next
更改为the new_part
节点,但它将queue.front.next
和queue.back.next
更改为等于new_part
。为什么会这样
我尝试过调试,并逐步完成了每一行。当我到达执行中的第7行(提到的那行)时,它只是将queue.front.next
和queue.back.next
设置为new_part
排队功能:
def enqueue(queue, element):
new_part = Node(element, None)
if is_empty_queue(queue):
queue.front = new_part
else:
queue.back.next = new_part
queue.back = new_part
测试功能:
def test_enqueue():
new_queue = make_queue()
enqueue(new_queue, 'arms')
print(new_queue)
enqueue(new_queue, 'legs')
print(new_queue)
enqueue(new_queue, 'head')
print(new_queue)
输出
Queue(size=0, front=Node(value='arms', next=None), back=Node(value='arms', next=None))
Queue(size=0, front=Node(value='arms', next=Node(value='legs', next=None)), back=Node(value='legs', next=None))
Queue(size=0, front=Node(value='arms', next=Node(value='legs', next=Node(value='head', next=None))), back=Node(value='head', next=None))
Process finished with exit code 0
输出是您想要的(除了需要添加逻辑以正确跟踪队列大小):将三个元素排队后,
'arms'
一个在队列的前面,'head'
一个在后面。因此,我假设问题只是理解代码,而不是修复代码当第一个元素排队时,
queue.front = new_part
和queue.back = new_part
都被执行,使它们都引用新创建的new_part = Node(element, None)
。因此,在将第二个元素排队之前,queue.front
和queue.back
是同一个对象这其实是正确的行为,;从逻辑上讲,对于包含一个元素的队列,前面和后面实际上是同一项。因此,当添加第二个元素时,它应该是队列前面的
next
,也应该是队列后面的next
。因此,我们创建该链接,然后重新调整queue.back
以引用新元素,因为它现在位于队列的后面正如您在对第三个元素排队时所看到的,
queue.front
和queue.back
在开始时不再相同,因此queue.front
不会受到影响相关问题 更多 >
编程相关推荐