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 表单取值赋值的一些基本操作
Oct 11 Javascript
jQuery MD5加密实现代码
Mar 15 Javascript
jquery ajax提交表单数据的两种实现方法
Apr 29 Javascript
JQuery.Ajax之错误调试帮助信息介绍
Jul 04 Javascript
JS实现动画兼容性的transition和transform实例分析
Dec 13 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
Dec 28 Javascript
JavaScript实现一个空中避难的小游戏
Jun 06 Javascript
bootstrap实现二级下拉菜单效果
Nov 23 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
Aug 27 Javascript
小程序点击图片实现自动播放视频
May 29 Javascript
浅谈实现在线预览PDF的几种解决办法
Aug 10 Javascript
微信小程序实现弹幕墙(祝福墙)
Nov 18 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
在PHP的图形函数中显示汉字
2006/10/09 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
javascript打印输出json实例
2013/11/11 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
Python使用MD5加密字符串示例
2014/08/22 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
Python装饰器语法糖
2019/01/02 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
python 遍历pd.Series的index和value
2019/11/26 Python
python 实现二维列表转置
2019/12/02 Python
python numpy 反转 reverse示例
2019/12/04 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
opencv 阈值分割的具体使用
2020/07/08 Python
python switch 实现多分支选择功能
2020/12/21 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
装饰资料员岗位职责
2013/12/30 职场文书
工程技术员岗位职责
2014/03/02 职场文书
融资合作协议书范本
2014/10/17 职场文书
2015年女职工工作总结
2015/05/15 职场文书
Python 全局空间和局部空间
2022/04/06 Python
js判断两个数组相等的5种方法
2022/05/06 Javascript