此链接队列代码是如何工作的?-python
我正试图理解这段代码是如何工作的,但在如何思考这段代码方面,我遇到了一些困惑,尤其是在如何将所有内容链接在一起的问题上 我是这样想的: 当队列(Q)初始化时,我们有Q=[self.\u head=None,self.\u tail=None,size=0](不是python代码——只是一种组织数据属性的可视化方式),然后当第一个元素排队时,我们创建一个节点N1=(e1,None),并将其分配给self.\u tail和Q=[(e1,None),(e1,None),1] 当第二个元素进入队列时,我们创建第二个节点N2=(e2,None),我们有self.\u tail.\u next=newest,它将Q更新为Q=[(e1,None),(e1,N2),1]。然后代码有self.\u tail=newest,它将Q更新为Q=[(e1,None),(e2,None),2] 看起来这里没有任何链接。我对这段代码的理解到底遗漏了什么此链接队列代码是如何工作的?-python,python,linked-list,Python,Linked List,我正试图理解这段代码是如何工作的,但在如何思考这段代码方面,我遇到了一些困惑,尤其是在如何将所有内容链接在一起的问题上 我是这样想的: 当队列(Q)初始化时,我们有Q=[self.\u head=None,self.\u tail=None,size=0](不是python代码——只是一种组织数据属性的可视化方式),然后当第一个元素排队时,我们创建一个节点N1=(e1,None),并将其分配给self.\u tail和Q=[(e1,None),(e1,None),1] 当第二个元素进入队列时,我
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
队列至少有两个点:一个指向头部,一个指向尾部。这允许您按照添加节点的顺序迭代节点,并将新节点添加到队列的末尾。我们可以将空队列可视化为:
Head -> <- Tail
将2
添加到队列:
Head -> 1 <- Tail
Head -> 1
2 <- Tail
Head -> 1
2
3 <- Tail
将一个元素移出队列意味着将Head
移动到下一个元素并返回旧值
1 <- first_element
Head -> 2
3 <- Tail
12
3.