封装队列
用数组进行封装
队列常见操作:
1、enqueue(element):
向队列尾部添加一个或多个新的项
2、dequeue():
移除队列第一项,并返回被移除的元素
3、front():
返回队列第一个元素,队列不做任何变动
4、isEmpty():
如果队列不包含任何元素,返回true,否则返回false
5、size():
返回队列包含的元素个数,与数组的length属性类似
6、toString():
将队列中的内容转成字符串形式
// 封装队列类
function Queue() {
this.items = [];
// 1、enter queue方法
Queue.prototype.enqueue = function (element) {
this.items.push(element);
}
// 2、delete queue方法
Queue.prototype.dequeue = function () {
return this.items.shift();
}
//3、查看队列中的第一个元素
Queue.prototype.front = function () {
return this.items[0];
}
// 4、查看队列是否为空
Queue.prototype.isEmpty = function () {
return this.items.length == 0;
}
// 5、查看队列中元素的个数
Queue.prototype.size = function () {
return this.items.length;
}
// 6、toString方法
Queue.prototype.toString = function(){
var resultString = '';
for(var i = 0; i < this.items.length; i++){
resultString += this.items[i] + ' '
}
return resultString
}
}
// 创建队列对象
var queue = new Queue();
// 在队列中添加元素
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
alert(queue);
// 查看一下队列前端元素
alert(queue.front())
// 查看队列是否为空和元素个数
alert(queue.isEmpty())
alert(queue.size())
// 从队列中删除元素
alert(queue.dequeue())
alert(queue.dequeue())
alert(queue.dequeue())
队列应用:
几个人围成一圈数数,数到某个数字的人自动淘汰,
最后剩下的人获胜,请问最后剩下的人原来所在的位置。
function passGame(nameList,num){
// 1、创建一个队列结构
var queue = new Queue();
// 2、将所有人依次加入到队列中
for(var i = 0; i < nameList.length; i++){
queue.enqueue(nameList[i]);
}
// 3、开始数数字
while(queue.size() > 1){
// 3.1不是num的时候,重新加入到队列末尾
for(var i = 0; i < num - 1; i++){
queue.enqueue(queue.dequeue());
}
// 3.2 num对应的这个人,直接从队列中删除
queue.dequeue();
}
//4、获取剩下的那个人
var endName = queue.front();
alert('最终剩下的人:' + endName);
return nameList.indexOf(endName);
}
// 测试
names = ['赵', '钱', '孙', '李', '周'];
alert(passGame(names,3));