JavaScript 队列操作
■知识点
使用unshiftO和shift()方法可以在数组头部执行操作。其中unshift()能够把一个或多个参数值附加到数组的头部,第1个参数为数组新的元素0,第2个参数为新的元素1,以此类推,最后返回添加元素后的数组长度。
shift()方法能够删除数组第1个元素,并返回该元素,然后将余下的所有元素前移一位,以填补数组头部的空缺。如果数组为空,shift()将不进行任何操作,返回undefined。
队列也是一种运算受限的线性表,不过与栈操作不同,队列只允许在一端进行插入操作,在另一端进行删除操作。队列遵循先进先出、后进后出的原则,类似的行为在生活中比较常见,如排队购物,任务排序等。在JavaScript动画设计中,也会用到队列操作来设计回调函数。
■实例设计
下面的示例是一个经典的编程游戏:有一群猴子排成一圈,按1、2、3、…、n依次编号,然后从第1只开始数,数到第m只,则把它踢出圈,然后从它后面再开始数,当再次数到第m只时,继续把它踢出圈,以此类推,直到只剩下一只猴子为止,那只猴子就叫作大王。要求编程模拟此过程,输入m、 n,输出最后那个大王的编号。
//n表示猴子的个数,m表示踢出的位置
function f(n, m){
//将猴子编号放入数组
var arr =[];
for (i = 1; i < n+1; i++){
arr.push(i);
}
//当数组内只剩下一只猴子时跳出循环
while(arr.length > 1){
for (var i=0; i< m-1 ; i++) { //定义排队轮转的次数
arr.push (arr.shift()); //队列操作,完成猴子的轮转
}
arr.shift(); //踢出第m只猴子
}
return arr; //返回包含最后一只猴子的数组
}
console.log( f (5,3)); //编号为4的猴子胜出
点击加载更多评论>>