我正在努力了解这段代码是如何工作的,并且我对如何思考它感到困惑,尤其是如何将所有内容链接在一起。
以下是我的想法:
当Queue(Q)初始化时,我们有Q = [self._head = None,self._tail = None,size = 0](不是python代码 - 只是组织数据属性的可视方式),然后当第一个元素入队时,我们创建一个节点N1 =(e1,None),它被分配给self._head和self._tail,Q = [(e1,None),(e1,None),1]。
当第二个元素排队到队列时,我们创建第二个节点N2 =(e2,None),我们有self._tail._next = newest,它将Q更新为Q = [(e1,None),(e1, N2),1]。然后代码有self._tail = newest,然后将Q更新为Q = [(e1,None),(e2,None),2]。
似乎它实际上并没有在这里链接任何东西。在理解这段代码时,我到底错过了什么?
class LinkedQueue:
class _Node:
__slots__='__element', '__next'
def __init__(self, element, next):
self._element = element
self._next = next
def __init__(self):
self._head = None
self._tail = None
self._size = 0
def dequeue(self):
if self.is_empty():
raise Exception('Queue is empty')
answer = self._head._element
self._head = self._head._next
self._size -= 1
if self.is_empty():
self._tail = None
return answer
def enqueue(self, e):
newest = self._Node(e, None)
if self.is_empty():
self._head = newest
else:
self._tail._next = newest
self._tail = newest
self._size += 1
答案 0 :(得分:1)
队列将至少有两个点:一个是头部,一个是尾部。这允许您按照添加的顺序迭代节点,并将新节点添加到队列的末尾。我们可以将空队列可视化为:
Head -> <- Tail
将1
添加到队列:
Head -> 1 <- Tail
将2
添加到队列:
Head -> 1
2 <- Tail
将3
添加到队列:
Head -> 1
2
3 <- Tail
将元素排队意味着将Head
移动到下一个元素并返回旧值。
1 <- first_element
Head -> 2
3 <- Tail
如果你想看一下,我有一个fairly basic Queue implementation。