解析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;iqueueEle.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 } ]

登录后复制

运行结果:

JavaScript数据结构之优先队列与循环队列实例详解

在正确的位置添加元素:如果队列为空,可以直接将元素入列。否则,就需要比较该元素与其他元素的优先级。当找到一个比要添加的元素优先级更低的项时,就把新元素插入到它之前,这样,对于其他优先级相同,但是先添加到队列的元素,我们同样遵循先进先出的原则。

最大优先队列:优先级的值大的元素放置在队列前面。

循环队列

实现击鼓传花游戏。

//创建一个类来表示队列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;i1){    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获胜

登录后复制

得到一份名单,把里面的名字全都加入队列。给定一个数字,然后迭代队列。从队列头移除一项,加入到队列尾部,模拟循环队列。一旦传递次数达到给定的数字,拿到花的那个人就被淘汰。最后只剩一个人的时候,他就是胜利者。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

BootStrap的文本编辑器组件Summernote使用详解

操作search组件在键盘显示

以上就是解析JS的优先队列与循环队列的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2771914.html

(0)
上一篇 2025年3月8日 13:06:26
下一篇 2025年3月8日 09:26:38

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS数据结构的双向链表定义

    这次给大家带来JS数据结构的双向链表定义,使用JS数据结构双向链表定义的注意事项有哪些,下面就是实战案例,一起来看一下。 双向链表和普通链表的区别在于,在链表中,一个节点只有链向下一个节点的链接,而在双向链表中,链接是双向的:一个链向下一个…

    编程技术 2025年3月8日
    200
  • js+css完善网页加载时的用户体验

    这次给大家带来,的注意事项有哪些,下面就是实战案例,一起来看一下。 需要材料: 一张loading动画的gif图片 基本逻辑: 模态框遮罩 + loading.gif动图,默认隐藏模态框页面开始发送Ajax请求数据时,显示模态框请求完成,隐…

    2025年3月8日
    200
  • AngularJS环境搭建步奏详解

    这次给大家带来AngularJS环境搭建步奏详解,AngularJS环境搭建的注意事项有哪些,下面就是实战案例,一起来看一下。 AngularJS是什么? AngularJS是一个开源Web应用程序框架。它最初是由MISKO Hevery和…

    编程技术 2025年3月8日
    200
  • Require调用js使用详解

    这次给大家带来Require调用js使用详解,Require调用js的注意事项有哪些,下面就是实战案例,一起来看一下。 在我最初开始写 JavaScript 函数时,通常是这样的: function fun1() { // some cod…

    编程技术 2025年3月8日
    200
  • JS自执行函数与jQuery扩展使用方法

    这次给大家带来JS自执行函数与jQuery扩展使用方法,JS自执行函数与jQuery扩展的注意事项有哪些,下面就是实战案例,一起来看一下。 我们通常将JS代码写在一个单独的JS文件中,然后在页面中引入该文件。但是,有时候引入后会碰到变量名或…

    编程技术 2025年3月8日
    200
  • JS模拟实现封装的方法

    这次给大家带来JS模拟实现封装的方法,JS模拟实现封装的注意事项有哪些,下面就是实战案例,一起来看一下。 前  言    继承是使用一个子类继承另一个父类,那么子类可以自动拥有父类中的所有属性和方法,这个过程叫做继承!  JS中有很多实现继…

    编程技术 2025年3月8日
    200
  • JS怎样检测浏览器内的脚本

    这次给大家带来JS怎样检测浏览器内的脚本,JS检测浏览器内脚本的注意事项有哪些,下面就是实战案例,一起来看一下。 以下是完整的用户代理字符串检测脚本,包括检测呈现引擎、平台、Windows操作系统、移动设备和游戏系统。 var client…

    编程技术 2025年3月8日
    200
  • JS中typeof和类型判断(附代码)

    这次给大家带来JS中typeof和类型判断(附代码),JS中typeof和类型判断的注意事项有哪些,下面就是实战案例,一起来看一下。 typeof ECMAScript 有 5 种原始类型(primitive type),即 Undefin…

    编程技术 2025年3月8日
    200
  • JS的正则表达式应用

    这次给大家带来JS的正则表达式应用,JS正则表达式应用的注意事项有哪些,下面就是实战案例,一起来看一下。 今天和大家分享一些关于正则表达式的知识和在javascript中的应用。正则表达式简单却又不简单,比如以前我的老师给我们讲的时候就说这…

    编程技术 2025年3月8日
    200
  • AngularJs用户登录时交互及验证步奏详解

    这次给大家带来AngularJs用户登录时交互及验证步奏详解,AngularJs用户登录时交互及验证的注意事项有哪些,下面就是实战案例,一起来看一下。 1. 静态页面搭建及ng的form表单验证实现: 登录 登录后复制 2. 定义用户登录的…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论