簡介佇列

基本資料結構

本投影片含有強烈不專業成份
如服用時有過敏不適等症狀
請立即停用並找專業教師治療矯正

  • Who: 佇列 (Queue)
  • What: 一種可以達成先被存進去的東西會先被取出來的有順序性儲存空間
  • Why: 有時不能立即處理或是希望先等到齊的工作,需要被"暫存"而且希望先來的工作還是會先被處理要有"順序"性
  • Where: 空間分為兩端,從後端(Rear)存入,從前端(Front)取出
  • When: 存入(Enqueue)時各元素遠離後端一步但前端還是前端,取(Dequeue)時各元素靠近前端一步但後端還是後端

雖然有點老梗

  • 如果借助List的力量 queue = []
  • 把list的第一個元素當成後端的話
  • enqueue -> queue.insert(0, XXX)
  • dequeue -> queue.pop()
  • enqueue需要遍歷所以是O(n),dequeue則是直接索引所以是O(1)
  • 那把最後一個元素當後端的話呢?

How

  • Programming Exercises 7
  • 單純只用list的行為的話另外一邊都需要遍歷
  • 有沒有辦法讓另一邊也可以用索引?
  • 特殊狀況是什麼?

再來偷跑一下

  • N個人圍一個圈
  • 定一個數字K
  • 從某一個人開始照順序一個一個數到第K個人出局
  • 從下一個人開始重覆直到剩下一個人

玩個遊戲

  • 像時鐘一樣,一到十二過完又從一開始
  • 懂了
    pointer = 0
    while 1 < len(all):
        for i in range(k):
            pointer += 1
            if pointer >= len(all): pointer = 0
        all.pop(pointer)
    all.pop() #survivor

圍圈?

  • 像時鐘一樣,一到十二排排過,一過完排回十二後過。
  • 懂了
    while 1 < all.size():
        for i in range(k):
            all.enqueue(all.dequeue())
        all.dequeue()
    all.dequeue() #survivor

這節好歹是在講佇列

  • 佇列本來就有隊列的意思,很自然有關排隊的工作會想使用佇列來作
  • 隊列可以變型,佇列也可以藉由操作方式變型
  • 但是本質就是元素帶順序並且先進後出

小結

Made with Slides.com