配列ベースの両端キューを作成する際に、できるだけ効率的になるようにしようとしています。だから、配列はサイズ1から始まり、新しい値を両端キューに押し込むときに配列の大きさが十分でない場合は、 "grow"という関数を呼び出します。私はモークの前面と背面を保存するためにモディファイします。ここに私がこれまで行ったことのサンプルがあります:配列dequeのサイズを増やす
def __init__(self):
# capacity starts at 1; we will grow on demand.
self.__capacity = 1
self.__contents = [None] * self.__capacity
self.__front = 1
self.__back = 1
self.__size = 1
def __grow(self):
old_list = self.__contents
walk = self.__front
for k in range(self.__capacity):
self.__contents[k] = old_list[walk]
walk = (1 + walk) % len(old_list)
self.__front = 0
self.__capacity = self.__capacity * 2
def push_front(self, val):
if self.__size == len(self.__contents):
self.__grow(self.__capacity)
self.__front = (self.__front - 1) % len(self.__contents)
self.__contents[self.__front] = val
self.__size += 1
私がgrowメソッドを呼び出すと、私の質問が出ます。私は、2つのポジティブな議論を「成長」させているというエラーを続けていますが、どこで、どのように起きているのか分かりません。誰かがこれを改善する方法に関するアイデアを持っているので、ポジティブな引数が1つしかないでしょうか?また、成長方法で再インデックスするための私の推論は、プッシュフロントメソッドのための私の推論と同様に意味を成していますか?
最初に私が提案したいのは、長さ( 'self .__ capacity = 1')を1で始まらないことです! –