我正在寻找一个功能(不一定非常有效,因为我是编程的新手)FIFO队列,并且我的出队有问题。
我的代码如下所示:
class QueueNode:
def __init__(self, data):
self.data = data
self.next = None
def __str__(self):
return str(self.data)
class Queue:
def __init__(self):
self.front = None
self.rear = None
self.size = 0
def enqueue(self, item):
newnode = QueueNode(item)
newnode.next = None
if self.size == 0:
self.front = self.rear = newnode
else:
self.rear = newnode
self.rear.next = newnode.next
self.size = self.size+1
def dequeue(self):
dequeued = self.front.data
del self.front
self.size = self.size-1
if self.size == 0:
self.rear = None
print self.front #for testing
如果我执行此操作并将项目出列,我会收到错误“AttributeError:Queue instance is no attribute'front'。”我想我的功能没有正确分配队列的新前端?我不知道如何修复它。
我真的不想从头开始,所以如果对我的代码进行调整可以工作,我更喜欢 - 我不是试图最小化运行时间,只是为了感受类和那种性质的东西。
提前感谢您的帮助。
答案 0 :(得分:3)
问题在于这一行:
del self.front
这会从front
中删除(“删除”)self
属性。因此,当您稍后尝试print self.front
几行时会出现错误。再也没有self.front
这样的东西了。
答案 1 :(得分:1)
您还删除了属性self.front
,然后再次尝试访问它。
del self.front
print self.front #for testing # you are tying to use self.front but you removed it
您在某些功能结束时缺少:
。
def dequeue(self): # <- missing that :
我不确定您的意图是什么,但self.front
是变量,它没有属性data
dequeued = self.front.data # remove the data
您还错过了def
和__init__
def__init__(self):