JavaScript 循环队列
循环队列,听名字就知道意思了,而实现的时候并不是真正将头和尾相连接,而是通过删除队首,再将删除的元素放在队尾实现。
这里的击鼓串花:每次循环删除掉一个元素,最终留下的为胜利者。 相关文章
JavaScript 数组 JavaScript 队列 JavaScript 优先队列
function Queue(){//定义队列对象 var items = [];//队列的承载 //向队列尾部添加一个或多个新的项 this.enqueue = function(el){ items.push(el) } //删除队列头部第一个元素 this.dequeue = function(){ return items.shift(); } //返回队列中第一个元素 this.front = function(){ return items[0]; } //确定元素是否为空 为空则为true 不为空则为false this.isEmpty = function(){ return items.length === 0; } //返回队列长度 this.size = function(){ return items.length; } //打印队列 this.print = function(){ console.log(items.toString()) } } function hotPotato (nameList, num){ var queue = new Queue(); for(var i = 0;i<nameList.length;i++){ queue.enqueue(nameList[i]); //把名单全部加入到队列 } var eliminated = ''; while (queue.size()>1){ //第一次队列:[John,JAck,Camila,Ingrid,Carl] //第二次队列:[ingrid,carl,john,jack] //第三次队列:[ingrid,carl,john] //第四次队列:[john,ingrid] for(var i = 0;i<num;i++){ queue.enqueue(queue.dequeue()); //删除队首元素->返回被删除的元素->放到队尾 //这一步就实现了循环队列的实质 } //for循环之后的队列 //第一次:[amila,ingrid,carl,john,Jack] //第二次:[jack,ingrid,carl,john] //第三次:[carl,john,ingrid] //第四次:[ingrid,john] //接下来进行的就是击鼓传花了 eliminated = queue.dequeue(); //删除队首,击鼓传花中,被淘汰掉了 //每次淘汰一个:淘汰顺序: //camila->jack->carl->ingrid console.log(eliminated + '在击鼓传花游戏中被淘汰'); } return queue.dequeue(); //胜出者 --》john } var names = ['John','JAck','Camila','Ingrid','Carl']; var winner = hotPotato(names,7); //这里的击鼓串花的间隔是相同的,可以根据实际项目需求,在hotPotato()中定义相应方法去生成 console.log('胜利者:'+ winner);
相关文章
JavaScript 数组
JavaScript 队列
JavaScript 优先队列
我的微信公众平台 不喜勿喷
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL批量更新死锁案例分析
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/82803467 问题描述 在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常,如下: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction at sun.reflect.GeneratedConstructorAccessor247.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor...
- 下一篇
JAVA实现调用微信js-sdk扫一扫
喜欢的朋友可以关注下。 已经很久没有给大家分享一片技术文章了,今天抽了点时间来,给大家说一说如何调用微信提供的扫一扫接口。 前提: 需要申请一个公众号:申请公众号需要的资料我就不说了,去申请微信会提示需要哪些。 准备appid(公众号的id) AppSecret (公众号的密钥) 正文: 首先,我们先来简单了解一下流程,详细的微信文档有说明。 获取Token→根据token获取Ticket→根据ticket签名→反会参数给前端→前端调起扫一扫接口 下面直接上代码 1.获取token /** * Description: 获取微信公众号token<BR> * * @author dsn * @date 2018年9月21日 上午9:53:26 * @param appid * @param secret * @return * @version 1.0 */ public static String getAccessToken(String appid, String secret) { String token = ""; String token_url = "http...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用