1

我正在寻找一个功能性(不一定是最佳效率,因为我对编程很陌生)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:队列实例没有属性'front'。” 我猜我的函数没有正确分配队列的新前面?我不知道如何解决它。

我真的不想从头开始,所以如果对我的代码进行一些调整可以工作,我更愿意这样做——我并不想尽量减少运行时间,而只是想了解类和类似的东西自然。

提前感谢您的帮助。

4

2 回答 2

3

问题是这一行:

del self.front

这会从 中删除(“删除”)front属性self。因此,当您稍后尝试print self.front几行时会出现错误。再也没有这种事self.front了。

于 2013-11-05T21:56:57.300 回答
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):
于 2013-11-05T21:53:31.047 回答