您的位置:首页 > Web前端 > JavaScript

JS实现队结构及利用队列模拟‘击鼓传花’游戏

2017-10-25 16:19 246 查看

简述

队列,是一种遵从先进先出(FIFO,First-In-First-Out)原则的有序集合。队列在尾部添加新元素,并从顶部移除元素,最新添加的元素必须排在队列的末尾。

代码说明

首先,先创建一个类表示队列,并且初始化一个空数组,用来保存队列里的元素

class Queue {
constructor() {
this.items = [];
};
}


接着,给这个队列声明一些方法:

1.enqueue(value):进队,添加一个新元素到队列末尾

2.dequeue():出队,移除队列中的第一个元素,同时返回该元素

3.front():获取队列中的第一个元素

4.isEmpty():判断队列是否为空。是返回true,否返回fallse

5.clear():清空队列里的元素

6.size():获取队列里元素的个数

具体代码

class Queue {
constructor() {
this.items = [];
}

//进队,从队的尾部进入
enqueue(value) {
this.items.push(value);
}

//出队,从队的头部出
dequeue() {
return this.items.shift();
}

//获取队中的第一个元素
front() {
return this.items[0];
}

//判断队是否为空
isEmpty() {
return this.items.length === 0;
}

//获取队中元素的个数
size() {
return this.items.length;
}
}


在这里,我们可以利用队列模拟‘击鼓传花’的游戏:

/*
*名称:击鼓传花
*参数:nameArr,为一个数组,包含了参与该游戏的所有人员名字;
*     num,击鼓的次数
*返回:最终游戏胜利者的名字
*/
function JGCH(nameArr, num) {
var queue = new Queue();  //实例化一个队列
for (var i = 0; i < nameArr.len
4000
gth; i++) {
queue.enqueue(nameArr[i]); //将传入的数组中的人员名字加入到队列中
}
var taotai = '';
while (queue.size() > 1) {
for (var i = 0; i < num; i++) {
//每击一次鼓,将队列开头的一项移至队尾
queue.enqueue(queue.dequeue());
}
//击鼓停止,拿着花的那个人即被淘汰,移出队列
taotai = queue.dequeue();
console.log(taotai + '被淘汰!!!');
}
//最后队列里剩下的那个人即为最终胜利者
return queue.dequeue();
}
var nameArr = ['郭靖', '张无忌', '乔峰', '虚竹', '段誉'];
console.log('最终胜利者是:' + JGCH(nameArr, 10));


游戏结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: