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