簡介佇列
基本資料結構
本投影片含有強烈不專業成份
如服用時有過敏不適等症狀
請立即停用並找專業教師治療矯正
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