JavaScript 隊列操作
■知識點
使用unshiftO和shift()方法可以在數(shù)組頭部執(zhí)行操作。其中unshift()能夠把一個或多個參數(shù)值附加到數(shù)組的頭部,第1個參數(shù)為數(shù)組新的元素0,第2個參數(shù)為新的元素1,以此類推,最后返回添加元素后的數(shù)組長度。
shift()方法能夠刪除數(shù)組第1個元素,并返回該元素,然后將余下的所有元素前移一位,以填補數(shù)組頭部的空缺。如果數(shù)組為空,shift()將不進行任何操作,返回undefined。
隊列也是一種運算受限的線性表,不過與棧操作不同,隊列只允許在一端進行插入操作,在另一端進行刪除操作。隊列遵循先進先出、后進后出的原則,類似的行為在生活中比較常見,如排隊購物,任務排序等。在JavaScript動畫設計中,也會用到隊列操作來設計回調函數(shù)。
■實例設計
下面的示例是一個經典的編程游戲:有一群猴子排成一圈,按1、2、3、…、n依次編號,然后從第1只開始數(shù),數(shù)到第m只,則把它踢出圈,然后從它后面再開始數(shù),當再次數(shù)到第m只時,繼續(xù)把它踢出圈,以此類推,直到只剩下一只猴子為止,那只猴子就叫作大王。要求編程模擬此過程,輸入m、 n,輸出最后那個大王的編號。
//n表示猴子的個數(shù),m表示踢出的位置
function f(n, m){
//將猴子編號放入數(shù)組
var arr =[];
for (i = 1; i < n+1; i++){
arr.push(i);
}
//當數(shù)組內只剩下一只猴子時跳出循環(huán)
while(arr.length > 1){
for (var i=0; i< m-1 ; i++) { //定義排隊輪轉的次數(shù)
arr.push (arr.shift()); //隊列操作,完成猴子的輪轉
}
arr.shift(); //踢出第m只猴子
}
return arr; //返回包含最后一只猴子的數(shù)組
}
console.log( f (5,3)); //編號為4的猴子勝出
點擊加載更多評論>>