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: Queue インスタンスに属性 '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 に答える