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));
游戏结果:
相关文章推荐
- js利用数组实现队列与堆栈效果
- js-队列使用-循环队列实现击鼓传花
- 【079】利用“剪叶子”算法实现树形结构的搜索功能,用Vue.js实现
- 利用Node.js实现模拟Session验证的登陆
- 【数据结构与算法C】利用两个栈S1S2模拟一个队列,用栈的基本操作实线EnQueue,DeQueue,QueueEmpty
- js利用数组实现队列与堆栈效果
- 数据结构 利用循环队列层次遍历一棵二叉树 递归实现
- 用数组实现js中的堆栈 或者队列数据结构
- sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)
- JS实现利用两个队列表示一个栈的方法
- 利用优先级队列实现事件驱动模拟
- Binary Tree Postorder Traversal(各种非递归实现,完美利用栈结构模拟)
- 利用Node.js实现模拟Session验证的登陆
- 利用两个栈模拟队列
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- js实现模拟计算器退格键删除文字效果的方法
- 利用bootstrap的carousel.js实现轮播图动画
- Java实现队列结构的详细代码
- JS数组实现队列和堆栈
- Android之利用session实现抵御模拟请求失败案例