網上的相關教程很是多,基礎知識自行搜索便可。便可。javascript
習題主要選自Orelly出版的《數據結構與算法javascript描述》一書。java
參考代碼可見:https://github.com/dashnowords/blogs/tree/master/Structure/Queuegit
特色:github
先進先出。算法
用途:數組
模擬流程或其餘帶有抽象排隊屬性的事物或邏輯,例如時間循環隊列,發佈訂閱模式的回調隊列等等。數據結構
基本方法函數
enqueue()
在隊尾插入一個元素dequeue()
從隊頭刪除一個元素getHeader()
獲取隊頭的元素getTail()
獲取隊尾的元素getLength()
獲取隊列的長度isEmpty()
判斷隊列是否爲空隊列須要留意的問題學習
使用javascript
語言來理解數據結構只可以幫助咱們理解結構的基本特性,因爲不涉及底層的原理,因此沒法深刻到算法細節的時間複雜度的話題上,對此感興趣的同窗建議在學習完數據結構入門後再去學習C語言描述版的數據結構資料。指針
Queue
類,並在後續題目中須要用隊列時使用它。dancingQueue(str)
,str
中記錄着前來參加舞會的人的性別,以空格分割,函數中須要實現將前來跳舞的人按性別分紅兩隊,每當舞池中有空位時,男隊和女隊的排在最前面的人組成舞伴進入,若是某一隊爲空時,須要返回對應的消息。PriorityQueue
類,實現優先隊列的功能,優先隊列的元素帶有權重,權重越高(通常認爲數字越小權重越高)的越早出隊。Queue
類,生成一個Deque
類,容許從隊列兩端添加和刪除元素,所以也叫雙向隊列。Deque
類判斷一個單詞是不是迴文。javascript中的數組就符合雙向隊列的特性,試着本身去實現幾個特徵方法便可。
Deque
類能夠從隊列兩端出隊,每次從兩端各出隊一個元素進行比較便可。
循環隊列
書中並無說起,它是一種特殊的隊列。簡單理解就是將基本隊列只當作存儲結構,而使用front
和rear
兩個指針分別表明隊列的頭和尾,實際對外表現的隊列是front
和rear
所指向的元素構成的。爲了複用存儲空間,循環隊列
在存儲結構的實現上是首位相連的。
front指針
指向隊頭rear指針
指向隊尾size
隊列的長度length
存儲空間的大小enqueue()
元素入隊dequeue()
元素出隊isEmpty()
判斷隊空isFull()
判斷隊滿getSize()
獲取隊列長度getLength()
獲取存儲空間長度clear()
清空隊列實現一個CircularQueue
類,並添加一個擴展方法resize()
,當存儲空間已滿且有元素入隊時,自動將存儲空間擴充一倍,當元素出隊形成隊列長度不足存儲空間的1/4時,將存儲空間減半以釋放空間。