標籤:https 發布訂閱 可見 參考 href 數字 ofo 大小 分享
網上的相關教程非常多,基礎知識自行搜尋即可。
習題主要選自Orelly出版的《資料結構與演算法javascript描述》一書。
參考代碼可見:https://github.com/dashnowords/blogs/tree/master/Structure/Queue
隊列的基本知識
基本練習
- 根據棧的特性實現一個
Queue類,並在後續題目中需要用隊列時使用它。
- 編寫一個函數
dancingQueue(str),str中記錄著前來參加舞會的人的性別,以空格分割,函數中需要實現將前來跳舞的人按性別分成兩隊,每當舞池中有空位時,男隊和女隊的排在最前面的人組成舞伴進入,如果某一隊為空白時,需要返回對應的訊息。
- 實現一個
PriorityQueue類,實現優先隊列的功能,優先隊列的元素帶有權重,權重越高(一般認為數字越小權重越高)的越早出隊。
課後習題(書中第五節習題)
- 修改
Queue類,產生一個Deque類,允許從隊列兩端添加和刪除元素,因此也叫雙向隊列。
- 使用
Deque類判斷一個單詞是否是迴文。
- 題目3和題目4比較簡單,不再贅述。
習題思路
javascript中的數組就符合雙向隊列的特性,試著自己去實現幾個特徵方法即可。
Deque類可以從隊列兩端出隊,每次從兩端各出隊一個元素進行比較即可。
擴充- 迴圈隊列
迴圈隊列書中並沒有提及,它是一種特殊的隊列。簡單理解就是將基本隊列只當做儲存結構,而使用front和rear兩個指標分別代表隊列的頭和尾,實際對外表現的隊列是front和rear所指向的元素構成的。為了複用儲存空間,迴圈隊列在儲存結構的實現上是首位相連的。
- 基本要素
front指標指向隊頭
rear指標指向隊尾
size隊列的長度
length儲存空間的大小
- 基本方法
enqueue()元素入隊
dequeue()元素出隊
isEmpty()判斷隊空
isFull()判斷隊滿
getSize()擷取隊列長度
getLength()擷取儲存空間長度
clear()清空隊列
基本練習
實現一個CircularQueue類,並添加一個擴充方法resize(),當儲存空間已滿且有元素入隊時,自動將儲存空間擴充一倍,當元素出隊造成隊列長度不足儲存空間的1/4時,將儲存空間減半以釋放空間。
野生前端的資料結構基礎練習(2)——隊列