2つのPythonリストを使用して、償却されたO(1)データ構造を取得できます。1つは両端キューの左半分を保持し、もう1つは右半分を保持します。前半分は逆に格納されるため、両端キューの左端がリストの最後になります。このようなもの:
class mydeque(object):
def __init__(self):
self.left = []
self.right = []
def pushleft(self, v):
self.left.append(v)
def pushright(self, v):
self.right.append(v)
def popleft(self):
if not self.left:
self.__fill_left()
return self.left.pop()
def popright(self):
if not self.right:
self.__fill_right()
return self.right.pop()
def __len__(self):
return len(self.left) + len(self.right)
def __getitem__(self, i):
if i >= len(self.left):
return self.right[i-len(self.left)]
else:
return self.left[-(i+1)]
def __fill_right(self):
x = len(self.left)//2
self.right.extend(self.left[0:x])
self.right.reverse()
del self.left[0:x]
def __fill_left(self):
x = len(self.right)//2
self.left.extend(self.right[0:x])
self.left.reverse()
del self.right[0:x]
このコードとPythonのリストの償却パフォーマンスとの相互作用が、実際に各操作でO(1)になるかどうかは、100%わかりませんが、私の直感ではそう言っています。