前言
- 有Python基礎
- 學過數據結構那就更妙了
原理
先進先出
- 注意:棧是先進後出
靈感來源於生活,也許這個“隊列”就是根據生活中的排隊的隊列所命名的。因爲它們的特點是共通的,都是先來排隊的先出去,即先進先出。因此在想到數據結構中的隊列時候,將其與生活中的排隊聯繫起來即可。圖片來源於百度百科,鏈接:
https://baike.baidu.com/item/%E9%98%9F%E5%88%97/14580481?fr=aladdin
-
初始化時,隊列爲空
-
添加元素時,添加的第一個元素作爲隊頭,之後加入的元素需要排在他的後面(類似於現實生活中的排隊)
-
出隊時,排在開頭的人先出,之後再輪到後面的元素
-
不同於棧,棧是隻對棧頂元素操作,隊列則是對隊頭隊尾的元素操作。
實現
環境
win10 + pycharm + python3.7。Python3是重點,其他的可換。
初始化
隊列的初始化,按上面的話講,應是空的隊列,初始化類似棧,同樣的是採用list類型作爲items
class Queue(object):
def __init__(self):
self.items = []
判空/遍歷/size
判空、遍歷、size方法依舊採用之前博客中的方法,鏈接
https://blog.csdn.net/sf9898/article/details/104939489
代碼
def isEmpty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
def travel(self):
for i in self.items:
print(i, end= ' ')
print('')
增加元素和刪除元素
- 隊列的重要部分,和棧區別的部分,即添加和刪除操作,入隊的時候肯定是從隊尾排起,因此直接將加進來的元素加到隊尾即可,現在用list類型的items模擬隊列,將items的第一個元素作爲隊頭,最後一個元素作爲隊尾,那麼在做將元素加到隊尾的這一步操作時,直接用append即可。
- 出隊的時候,是從隊頭開始走人的。那麼用pop(0)即可。
# 隊列是先進先出
# 入隊
def push(self, item):
self.items.append(item)
# 出隊
def pop(self):
self.items.pop(0)
完整代碼
class Queue(object):
def __init__(self):
self.items = []
def isEmpty(self):
return len(self.items) == 0
# 隊列是先進先出
# 入隊
def push(self, item):
self.items.append(item)
# 出隊
def pop(self):
self.items.pop(0)
def size(self):
return len(self.items)
def travel(self):
for i in self.items:
print(i, end=' ')
print('')
q = Queue()
print(q.isEmpty())
for i in range(5):
q.push(i)
q.travel() # 打印出0-5
print("size:", q.size())
q.pop()
q.pop() # 進行2次出隊的操作,講道理是前兩個元素即0和1出去了,現在遍歷應該是隻有後三個元素即2 3 4
print("size:", q.size())
q.travel()
- 結果