分別用有序列表和鏈實現了雙端隊列,主要包括首端加入/刪除、末端加入/刪除等功能。
方法一:有序列表的實現
class Deque(object):
def __init__(self):
self.data = []
def __repr__(self):
return str(self.data)
def addRear(self, value):
self.data.append(value)
def addFront(self, value):
self.data.insert(0, value)
def removeRear(self):
if self.isEmpty():
raise IndexError("remove from empty deque")
else:
self.data.pop()
def removeFront(self):
if self.isEmpty():
raise IndexError("remove from empty deque")
else:
self.data.pop(0)
def isEmpty(self):
return len(self.data) == 0
def __len__(self):
return len(self.data)
方法二:單鏈表的實現
class Node(object):
def __init__(self, value, next=None):
self.value = value
self.next = next
class Deque(object):
def __init__(self):
self.head = None
def __repr__(self):
data_list = []
current = self.head
while current:
data_list.append(current.value)
current = current.next
return str(data_list)
def addRear(self, value):
new_node = Node(value)
if self.isEmpty():
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node
def addFront(self,value):
new_node = Node(value)
if self.isEmpty():
self.head = new_node
else:
current = self.head
new_node.next = current
self.head = new_node
def removeRear(self):
if self.isEmpty():
raise IndexError("remove from empty deque")
else:
current = self.head
if current.next is None:
self.head = None
return current.value
else:
while current.next.next:
current = current.next
value = current.next.value
current.next = None
return value
def removeFront(self):
if self.isEmpty():
raise IndexError("remove from empty deque")
value = self.head.value
self.head = self.head.next
return value
def isEmpty(self):
return self.head is None
def __len__(self):
length = 0
current = self.head
while current:
length += 1
current = current.next
return length