原生JS实现队结构及利用队列模拟‘击鼓传花’游戏
1. 前言
队列,是一种遵从先进先出(FIFO,First-In-First-Out)原则的有序集合。队列在尾部添加新元素,并从顶部移除元素,最新添加的元素必须排在队列的末尾。
2.功能说明
- enqueue(value):进队,添加一个新元素到队列末尾
- dequeue():出队,移除队列中的第一个元素,同时返回该元素
- front():获取队列中的第一个元素
- isEmpty():判断队列是否为空。是返回true,否返回fallse
- clear():清空队列里的元素
- size():获取队列里元素的个数
3. 代码实现
首先,先创建一个类表示队列,并且初始化一个空数组,用来保存队列里的元素
class Queue { constructor() { this.items = []; }; }
接着,在这个队列类中实现所需要的功能:
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; } }
4. 测试
在这里,我们可以利用队列模拟‘击鼓传花’的游戏:
/* *名称:击鼓传花 *参数:nameArr,为一个数组,包含了参与该游戏的所有人员名字; * num,击鼓的次数 *返回:最终游戏胜利者的名字 */ function JGCH(nameArr, num) { var queue = new Queue(); //实例化一个队列 for (var i = 0; i < nameArr.length; 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));
游戏结果:
5.完整代码
完整代码请戳☞☞☞Queue.js
(完)
免责声明
- 本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
- 博主在此发文(包括但不限于汉字、拼音、拉丁字母)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对观点。如需要详查请直接与键盘生产厂商法人代表联系。挖井挑水无水表,不会网购无快递。
- 博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高(其实是个菜B),不足和错误之处在所难免,希望大家能够批评指出。
- 博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!
posted on 2018-08-12 14:18 难凉热血,码梦为生! 阅读(754) 评论(0) 编辑 收藏 举报