1. 隊列的概念
隊列(queue)是 只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
隊列是一種 先進先出
的(First In First Out)的線性表,簡稱FIFO。允許插入的一端爲隊尾,允許刪除的一端爲隊頭。隊列不允許在中間部位進行操作
!假設隊列是q=(a1,a2,……,an),那麼a1就是隊頭元素,而an是隊尾元素。這樣我們就可以刪除時,總是從a1開始,而插入時,總是在隊列最後。這也比較符合我們通常生活中的習慣,排在第一個的優先出列,最後來的當然排在隊伍最後。
2. 隊列的實現
同棧一樣,隊列也可以用順序表或者鏈表實現:
具體的操作有:創建一個空的隊列、往隊列中添加一個item元素、從隊列頭部刪除一個元素、 判斷一個隊列是否爲空、返回隊列的大小。
class Queue():
def __init__(self):
self.__list = []
def enqueue(self, item):
# 如果出隊比入隊操作頻率高
# self.__list.insert(0, item)
# 如果入隊比出隊操作頻率高
self.__list.append(item)
def dequeue(self):
# 如果出隊比入隊操作頻率高
# self.__list.pop()
# 如果入隊比出隊操作頻率高
return self.__list.pop(0)
def is_empty(self):
return self.__list == []
def size(self):
return len(self.__list)
# 創建一個空的雙端隊列
q = Queue()
q.enqueue(1)
q.enqueue(1.2)
q.enqueue('thanlon')
q.enqueue([1, 2, 3])
print('入隊狀態:已完成')
print('當前隊列是否爲空:', q.is_empty())
print('當前隊列的大小:', q.size())
print(q.dequeue())
print(q.dequeue())
print(q.dequeue())
print(q.dequeue())
"""
入隊狀態:已完成
當前隊列是否爲空: False
當前隊列的大小: 4
1
1.2
thanlon
[1, 2, 3]
"""
3. 雙端隊列的概念
雙端隊列(deque,全名double-ended queue),是一種具有 隊列和棧的性質的數據結構
。雙端隊列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端隊列可以在隊列任意一端入隊和出隊。
4. 雙端隊列的實現
雙端隊列兩端都可以入隊和出隊
,相對於一般隊列操作要多幾步,具體的操作有: 創建一個空的雙端隊列、從隊頭加入一個item元素、從隊尾加入一個item元素、從隊頭刪除一個item元素、從隊尾刪除一個item元素、判斷雙端隊列是否爲空、返回隊列的大小。
class Dqueue():
def __init__(self):
self.__list = []
def add_tail(self, item):
"""
從隊列尾部添加元素
:param item:
:return:
"""
self.__list.append(item)
def remove_front(self):
"""
從隊列頭部刪除元素
:return:
"""
return self.__list.pop(0)
def add_front(self, item):
"""
從隊列頭部添加元素
:param item:
:return:
"""
self.__list.insert(0, item)
def remove_tail(self):
"""
從隊列尾部刪除元素
:param item:
:return:
"""
return self.__list.pop()
def is_empty(self):
return self.__list == []
def size(self):
return len(self.__list)
# 創建一個空的雙端隊列
dq = Dqueue()
# 尾部添加元素,頭部刪除元素
dq.add_tail(1)
dq.add_tail(1.2)
dq.add_tail('thanlon')
dq.add_tail([1, 2, 3])
print('尾部已經完成元素的添加!')
print('當前隊列是否爲空:', dq.is_empty())
print('當前隊列的大小:', dq.size())
print(dq.remove_front())
print(dq.remove_front())
print(dq.remove_front())
print(dq.remove_front())
# 尾部添加元素,頭部刪除元素
dq.add_front(1)
dq.add_front(1.2)
dq.add_front('thanlon')
dq.add_front([1, 2, 3])
print('頭部已經完成元素的添加!')
print('當前隊列是否爲空:', dq.is_empty())
print('當前隊列的大小:', dq.size())
print(dq.remove_tail())
print(dq.remove_tail())
print(dq.remove_tail())
print(dq.remove_tail())
"""
尾部已經完成元素的添加!
當前隊列是否爲空: False
當前隊列的大小: 4
1
1.2
thanlon
[1, 2, 3]
頭部已經完成元素的添加!
當前隊列是否爲空: False
當前隊列的大小: 4
1
1.2
thanlon
[1, 2, 3]
"""
Github:https://github.com/ThanlonSmith/Data-Structure-Python3