我试图在创建基于数组的双端队列时尽可能高效地利用空间。因此,数组从大小 1 开始,如果当我将新值推送到双端队列(在任一端)时数组不够大,我将调用一个名为“grow”的函数。然后我修改以保留双端队列的正面和背面。这是我到目前为止所做的一个示例:
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
当我调用增长方法时,我的问题就来了。我不断收到错误,即我给出了“增长”两个位置参数,但我不知道这是在哪里或如何发生的。如果有人对如何改进这一点有任何想法,以便它只有一个位置论据?另外,我对在增长方法中重新索引的推理以及我对前推方法的推理是否有意义?