最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

解析JS的优先队列与循环队列

来源:动视网 责编:小采 时间:2020-11-27 19:54:46
文档

解析JS的优先队列与循环队列

解析JS的优先队列与循环队列:这次给大家带来解析JS的优先队列与循环队列,解析JS优先队列与循环队列的注意事项有哪些,下面就是实战案例,一起来看一下。优先队列 实现一个优先队列:设置优先级,然后在正确的位置添加元素。 我们这里实现的是最小优先队列,优先级的值小(优先级高)的元
推荐度:
导读解析JS的优先队列与循环队列:这次给大家带来解析JS的优先队列与循环队列,解析JS优先队列与循环队列的注意事项有哪些,下面就是实战案例,一起来看一下。优先队列 实现一个优先队列:设置优先级,然后在正确的位置添加元素。 我们这里实现的是最小优先队列,优先级的值小(优先级高)的元
 这次给大家带来解析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的优先队列与循环队列

解析JS的优先队列与循环队列:这次给大家带来解析JS的优先队列与循环队列,解析JS优先队列与循环队列的注意事项有哪些,下面就是实战案例,一起来看一下。优先队列 实现一个优先队列:设置优先级,然后在正确的位置添加元素。 我们这里实现的是最小优先队列,优先级的值小(优先级高)的元
推荐度:
标签: js 队列 循环队列
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top