隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭。
隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表(先進先出原則)。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭。隊列中沒有元素時,稱爲空隊列。
隊列的數據元素又稱爲隊列元素。在隊列中插入一個隊列元素稱爲入隊,從隊列中刪除一個隊列元素稱爲出隊。因爲隊列只允許在一端插入,在另一端刪除,所以只有最早進入隊列的元素才能最先從隊列中刪除,故隊列又稱爲先進先出(FIFO—first in first out)線性表。
隊列的實現
同棧一樣,隊列也可以用順序表或者鏈表實現。
操作
- Queue() 創建一個空的隊列
- enqueue(item) 往隊列中添加一個item元素
- dequeue() 從隊列頭部刪除一個元素
- is_empty() 判斷一個隊列是否爲空
- size() 返回隊列的大小
class Queue(object):
"""隊列"""
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def enqueue(self, item):
"""進隊列"""
self.items.insert(0,item)
def dequeue(self):
"""出隊列"""
return self.items.pop()
def size(self):
"""返回大小"""
return len(self.items)
if __name__ == "__main__":
q = Queue()
q.enqueue("hello")
q.enqueue("world")
q.enqueue("itcast")
print (q.size())
print (q.dequeue())
print (q.dequeue())
print (q.dequeue())
雙端隊列
雙端隊列(deque,全名double-ended queue),是一種具有隊列和棧的性質的數據結構。
雙端隊列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端隊列可以在隊列任意一端入隊和出隊。
操作
- Deque() 創建一個空的雙端隊列
- add_front(item) 從隊頭加入一個item元素
- add_rear(item) 從隊尾加入一個item元素
- remove_front() 從隊頭刪除一個item元素
- remove_rear() 從隊尾刪除一個item元素
- is_empty() 判斷雙端隊列是否爲空
- size() 返回隊列的大小
實現
class Deque(object):
"""雙端隊列"""
def __init__(self):
self.items = []
def is_empty(self):
"""判斷隊列是否爲空"""
return self.items == []
def add_front(self, item):
"""在隊頭添加元素"""
self.items.insert(0,item)
def add_rear(self, item):
"""在隊尾添加元素"""
self.items.append(item)
def remove_front(self):
"""從隊頭刪除元素"""
return self.items.pop(0)
def remove_rear(self):
"""從隊尾刪除元素"""
return self.items.pop()
def size(self):
"""返回隊列大小"""
return len(self.items)
if __name__ == "__main__":
deque = Deque()
deque.add_front(1)
deque.add_front(2)
deque.add_rear(3)
deque.add_rear(4)
print deque.size()
print deque.remove_front()
print deque.remove_front()
print deque.remove_rear()
print deque.remove_rear()