資料結構與演算法JavaScript (二) :佇列

發表於2015-01-16

佇列是隻允許在一端進行插入操作,另一個進行刪除操作的線性表,佇列是一種先進先出(First-In-First-Out,FIFO)的資料結構

佇列在程式程式設計中用的非常的頻繁,因為javascript單執行緒,所以導致了任何一個時間段只能執行一個任務,而且還參雜了非同步的機制,

那麼帶來的問題:

1. 在非同步操作執行的時候,同步程式碼還在繼續,那麼同步程式碼依賴非同步,自然就會出錯

2. 多個同步的任務在不同的時間段被呼叫


jQuery的動畫中,我們經常寫一段連續的動畫程式碼

給我們的直觀感覺就是:第一個animate結束後元素的opacity變成0.25,然後開始繼續執行第二個animate,元素的opacity變成0.5, 之後類推。但是實際上來說這裡就設計了一個本質的問題,動畫可是非同步呼叫的,animate方法是同步在執行的,所以這裡就需要設計到佇列,jQuery也給出了一個專門為動畫設計的queue方法


佇列本來也是一種特殊的線性表,在JavaScript我們可以直接使用陣列實現這樣的一個設計,陣列的push()方法可以在陣列末尾加入元素,shift()方法則可刪除陣列的第一個元素。


佇列採用的是線性的儲存,那麼就存在著順序儲存的一些弊端,比如排隊買票,如果第一個買好了,後面的就會自然的往前移動一個空位,這樣涉及到整個佇列的每一個成員都要往前移動,不過JavaScript的佇列是用陣列描述的,底層解決了些弊端了。當然還有查詢演算法上的問題,比如可以用陣列實現單連結串列結構等等,我們這裡只討論javascript的佇列


模擬jQuery,使用佇列實現一個動畫

測試

相關文章