我希望制作一个功能性(不一定是最佳效率,因为我对编程很陌生)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
如果我这样做,并将一个项目取消排队,我会收到错误"属性错误:队列实例没有属性'front'"。我想我的函数没有正确分配队列的新前端?不过我不确定如何解决它。
我真的不想从头开始,所以如果对我的代码进行任何调整可以工作,我更喜欢这样 - 我不想最小化运行时,而只是想感受一下类和这种性质的东西。
提前感谢任何帮助。
问题是这一行:
del self.front
这将从self
中删除("删除")front
属性。因此,当您稍后尝试print self.front
几行时会出现错误。再也没有self.front
这样的事情了。
还将删除该属性,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):