解析JS的优先队列与循环队列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了解析JS的优先队列与循环队列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3072字,纯文字阅读大概需要5分钟。
内容图文
这次给大家带来解析JS的优先队列与循环队列,解析JS优先队列与循环队列的注意事项有哪些,下面就是实战案例,一起来看一下。优先队列
实现一个优先队列:设置优先级,然后在正确的位置添加元素。
我们这里实现的是最小优先队列,优先级的值小(优先级高)的元素被放置在队列前面。
//创建一个类来表示优先队列 function Priorityqueue(){ var items=[];//保存队列里的元素 function QueueEle(e,p){//元素节点,有两个属性 this.element=e;//值 this.priority=p;//优先级 } this.enqueue=function(e,p){//添加一个元素到队列尾部 var queueEle=new QueueEle(e,p); var added=false; //priority小的优先级高,优先级高的在队头 if(this.isEmpty()){ items.push(queueEle); }else{ for(var i=0;i<items.length;i++){ if(items[i].priority>queueEle.priority){ items.splice(i,0,queueEle); added=true; break; } } if(!added){ items.push(queueEle); } } } this.isEmpty=function(){ return items.length==0; } this.dequeue=function(){ return items.shift(); } this.clear=function(){ items=[]; } this.print=function(){ console.log(items); } this.mylength=function(){ return items.length; } } var pqueue=new Priorityqueue(); pqueue.enqueue('a',2); pqueue.enqueue('b',1); pqueue.enqueue('c',2); pqueue.enqueue('d',2); pqueue.enqueue('e',1); pqueue.print(); //[ QueueEle { element: 'b', priority: 1 }, // QueueEle { element: 'e', priority: 1 }, // QueueEle { element: 'a', priority: 2 }, // QueueEle { element: 'c', priority: 2 }, // QueueEle { element: 'd', priority: 2 } ]
运行结果:
在正确的位置添加元素:如果队列为空,可以直接将元素入列。否则,就需要比较该元素与其他元素的优先级。当找到一个比要添加的元素优先级更低的项时,就把新元素插入到它之前,这样,对于其他优先级相同,但是先添加到队列的元素,我们同样遵循先进先出的原则。
最大优先队列:优先级的值大的元素放置在队列前面。
循环队列
实现击鼓传花游戏。
//创建一个类来表示队列 function Queue(){ var items=[];//保存队列里的元素 this.enqueue=function(e){//添加一个元素到队列尾部 items.push(e); } this.dequeue=function(){//移除队列的第一项,并返回 return items.shift(); } this.front=function(){//返回队列的第一项 return items[0]; } this.isEmpty=function(){//如果队列中部包含任何元素,返回true,否则返回false return items.length==0; } this.mylength=function(){//返回队列包含的元素个数 return items.length; } this.clear=function(){//清除队列中的元素 items=[]; } this.print=function(){//打印队列中的元素 console.log(items); } } //击鼓传花 function hotPotato(namelist,num){ var queue=new Queue(); for(var i=0;i<namelist.length;i++){ queue.enqueue(namelist[i]); } var eliminated=''; while(queue.mylength()>1){ for(i=0;i<num;i++){ queue.enqueue(queue.dequeue()); } eliminated=queue.dequeue(); console.log("淘汰"+eliminated); } return queue.dequeue(); } var namelist=['a','b','c','d','e']; var winner=hotPotato(namelist,7); console.log(winner+"获胜"); //淘汰c //淘汰b //淘汰e //淘汰d //a获胜
得到一份名单,把里面的名字全都加入队列。给定一个数字,然后迭代队列。从队列头移除一项,加入到队列尾部,模拟循环队列。一旦传递次数达到给定的数字,拿到花的那个人就被淘汰。最后只剩一个人的时候,他就是胜利者。
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
BootStrap的文本编辑器组件Summernote使用详解
操作search组件在键盘显示
以上就是解析JS的优先队列与循环队列的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的解析JS的优先队列与循环队列全部内容,希望文章能够帮你解决解析JS的优先队列与循环队列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。