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


Posted in Javascript onOctober 27, 2017

本文实例讲述了JavaScript数据结构之优先队列与循环队列。分享给大家供大家参考,具体如下:

优先队列

实现一个优先队列:设置优先级,然后在正确的位置添加元素。

我们这里实现的是最小优先队列,优先级的值小(优先级高)的元素被放置在队列前面。

//创建一个类来表示优先队列
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 } ]

运行结果:

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;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获胜

运行结果:

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

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

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
仿迅雷焦点广告效果(JQuery版)
Nov 19 Javascript
js 表格隔行颜色
Dec 02 Javascript
javascript显式类型转换实例分析
Apr 25 Javascript
JS实现自动变换的菜单效果代码
Sep 09 Javascript
JS解决iframe之间通信和自适应高度的问题
Aug 24 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
Jun 21 Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
javascript中的数据类型检测方法详解
Aug 07 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
Oct 15 Javascript
Vue数字输入框组件使用方法详解
Feb 10 Javascript
在vue中created、mounted等方法使用小结
Jul 21 Javascript
Express系列之multer上传的使用
Oct 27 #Javascript
微信小程序返回多级页面的实现方法
Oct 27 #Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 #Javascript
基于JavaScript实现报警器提示音效果
Oct 27 #Javascript
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 #Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
Oct 27 #jQuery
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 #Javascript
You might like
相对路径转化成绝对路径
2007/04/10 PHP
PHP STRING 陷阱原理说明
2010/07/24 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
php实现的操作excel类详解
2016/01/15 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
Python编程之多态用法实例详解
2015/05/19 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
企划经理的岗位职责
2013/11/17 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
爱的承诺书
2015/01/20 职场文书
志愿者个人总结
2015/03/03 职场文书
预备党员介绍人意见
2015/06/01 职场文书
西柏坡观后感
2015/06/08 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
mysqldump进行数据备份详解
2022/07/15 MySQL