(Python3)數據結構——02.隊列的原理及實現

前言

  • 有Python基礎
  • 學過數據結構那就更妙了

原理

先進先出

  • 注意:棧是先進後出

靈感來源於生活,也許這個“隊列”就是根據生活中的排隊的隊列所命名的。因爲它們的特點是共通的,都是先來排隊的先出去,即先進先出。因此在想到數據結構中的隊列時候,將其與生活中的排隊聯繫起來即可。圖片來源於百度百科,鏈接:

 https://baike.baidu.com/item/%E9%98%9F%E5%88%97/14580481?fr=aladdin

在這裏插入圖片描述

  1. 初始化時,隊列爲空

  2. 添加元素時,添加的第一個元素作爲隊頭,之後加入的元素需要排在他的後面(類似於現實生活中的排隊)

  3. 出隊時,排在開頭的人先出,之後再輪到後面的元素

  4. 不同於棧,棧是隻對棧頂元素操作,隊列則是對隊頭隊尾的元素操作。

實現

環境

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()
  • 結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章