[資料結構]Stack — 堆疊和Queue — 佇列

Stack

Stack 是一種資料結構,遵循著後進先出的原則,最晚放入堆疊的資料會被最先取出(LIFO Last-In-First-Out),最早放入堆疊的資料會被最後取出(FILO First-In-Last-Out),就像堆疊的盤子一樣,如果要添加盤子一定是從最上面開始放,如果要取出盤子也是從最上面開始拿,堆疊會有兩種操作,pop —  從上面移除和 push —  從上面新增。

用 js 實作 Stack

Queue

佇列可以把想像是一個排隊的隊伍,排在第一順位的客人買到了車票所以離開了隊伍,而隊伍的後方陸續有新的排隊人潮加入,和堆疊不同的是,佇列是先進先出(FIFO First-In-First-Out),跟堆疊的後進先出(LIFO Last-In-First-Out)是不一樣的,佇列有兩種操作:push —  從後面新增和 shift —  從前面移除。

佇列跟 array 不同是沒有 index

用 js 實作 Queue

這時候眼尖的你應該發現,不管是 Stack 或是 Queue,其實都可以用 js 的 array 方法, pop() 、push()、 shift()來實作。

理解了 Stack 和 Queue 之後,相信就會更清楚 Event Loop 的流程啦!相信大家都知道 JavaScript 是單線程的程式語言,一次只能做一件事情,所以 Stack 會把裡面的任務(由上而下)依序處理,每處理完一個片段就 pop 掉,直到 Stack 清空,這時 queue 如果還有排隊等候的任務就會加入到 stack 裡面,這個過程就是 Event Loop。