學習Javascript數據結構與算法 — 隊列

<b><em>代碼運行環境:任何可以運行Javascript的環境即可。</em></b>

第一章:隊列

1. 什么是隊列?

<b>特性:先進去的元素,肯定先出隊列。( FIFO )
生活中最常見的就是排隊買車票。</b>

隊列是一種特殊的線性表;
最開始的隊列總是空的
它只允許在表的前端(front)進行刪除操作;
而在表的后端(rear)進行插入操作;
隊列是一種操作受限制的線性表;
進行插入操作的端稱為隊尾( 入隊 );
進行刪除操作的端稱為隊頭 ( 出隊 );
第一個插入的元素就是隊頭;

說到隊列,肯定需要提到的是數組,數組在Javascript里是可修改的對象,以下是數組的一些核心方法:

  1. concat(item1,item2,...,itemN) 合并一個或者多個數組 返回結果
  2. push(item) 往數組最后面添加一個或多個元素,使用:“ , ” 分開參數。
  3. pop() 從數組最后面,移除一個元素,并返回這個值
  4. shift() 函數刪除數組第一個元素,并返回這個值
  5. unshift(item1,item2,...,itemN) 向數組的開頭添加一個或更多元素,并返回數組更新后的長度。
  6. slice(startIndex,endIndex) 從已有的數組中返回選定的元素。
  7. splice(index,deleteNumber,item1...) 方法向/從數組中添加/刪除項目,然后返回被刪除的項目。
  8. ...
2.實現

<code>
//我們創建一個類(函數)用來 表示隊列
/*
我們將實現以下方法:
enqueue() 入隊
dequeue () 出隊
front () 返回隊頭
isEmpty() 隊列是否為空
clear() 清空隊列
size() 返回這個隊列的長度
print() 打印隊列所有元素
*/
function Queue(){
var items =[];
this.enqueue = function(elements){
items.push(elements); //入隊,第一個進入的是隊頭,所以之后入隊的元素應該是往后添加。
}
this.dequeue = function(){
return items.shift() //出隊,一個入隊的應該最先出隊,所以應該刪除第一個元素
}
this.front = function(){
return items[0]; //獲取隊頭,返回第一個入隊的元素
}
this.isEmpty = function(){
return items.length == 0;
}
this.clear = function(){
items = [];
}
this.size = function(){
return items.length;
}
this.print = function(){
console.log(items);
}
}

var newQueue = new Queue();
newQueue.enqueue(5); // [5]
newQueue.enqueue(8); //[5,8]
newQueue.enqueue(10); //[5,8,10]
newQueue.dequeue() //[8,10];
newQueue.isEmpty() // false
</code>
...

3. 隊列的實現主要依靠數組,所以了解和學會數組的核心方法是很有必要的。

4. 接下來我們學習優先隊列。普通的隊列是一種先進先出的數據結構,元素在隊列尾追加,而從隊列頭刪除。在優先隊列中,元素被賦予優先級。當訪問元素時,具有最高優先級的元素最先刪除。優先隊列具有最高級先出 (first in, largest out)的行為特征。

—— END ——

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容