雙端隊列[double-ended queue]:
描述:
1. 雙端隊列是一個限定插入和刪除操作的數據結構,具有隊列和棧的性質。
2. 雙端隊列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。
3. 雙端隊列是指允許兩端都可以進行入隊和出隊操作的隊列,其元素的邏輯結構仍是線性結構。將隊列的兩端分別稱為前端和后端,兩端都可以入隊和出隊。
利用python的list來實現
簡潔版:
class Deque(object):
def __init__(self):
self.__list = []
def add_front(self, item):
self.__list.insert(0, item)
def add_rear(self, item):
self.__list.append(item)
def pop_front(self):
return self.__list.pop(0)
def pop_rear(self):
return self.__list.pop()
def is_empty(self):
return self.__list == []
def size(self):
if self.__list:
return len(self.__list)
else:
return None
注釋版:
class Deque(object):
"""雙端隊列"""
def __init__(self):
"""初始化函數, 創建一個隊列[python中的空鏈表]"""
self.__list = []
def add_front(self, item):
"""首部添加元素"""
self.__list.insert(0, item)
def add_rear(self, item):
"""尾部添加元素"""
self.__list.append(item)
def pop_front(self):
"""首部刪除元素"""
return self.__list.pop(0)
def pop_rear(self):
"""尾部刪除元素"""
return self.__list.pop()
def is_empty(self):
"""是否為空隊列"""
return self.__list == []
# 等價於 return not self.__list
def size(self):
"""隊列的長度"""
if self.__list:
return len(self.__list)
else:
return None
"""注意: 空列表不能使用切片, 如果列表不為空, 返回長度, 反之返回None"""