我試圖在創建基於數組的雙端隊列時儘可能高效地使用空間。所以,數組從第一個開始,如果數組不夠大時,我會調用一個名爲「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方法時,我的問題就出現了。我不斷收到我給出的'增長'兩個位置參數的錯誤,但我不知道發生了什麼或發生了什麼。如果有人對如何改善這個問題有任何想法,以便它只有一個立場論點?另外,我的推理是否適合在增長方法中重新編制索引,以及推理方法的推理是否合理?
我想建議的第一件事是,不要以一個開始長度('self .__ capacity = 1')! –