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 相关文章推荐
在IE模态窗口中自由查看HTML源码的方法
Mar 08 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 Javascript
jquery与js函数冲突的两种解决方法
Sep 09 Javascript
使用js简单实现了tree树菜单
Nov 20 Javascript
javascript框架设计之类工厂
Jun 23 Javascript
跟我学习javascript的var预解析与函数声明提升
Nov 16 Javascript
两行代码轻松搞定JavaScript日期验证
Aug 03 Javascript
Node解决简单重复问题系列之Excel内容的获取
Jan 02 Javascript
使用vue-infinite-scroll实现无限滚动效果
Jun 22 Javascript
详解Vue中watch对象内属性的方法
Feb 01 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
Mar 03 Javascript
js如何验证密码强度
Mar 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+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
Javascript里使用Dom操作Xml
2007/01/22 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
jQuery拖动布局其结果保存到数据库
2015/10/09 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
python使用any判断一个对象是否为空的方法
2014/11/19 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
使用Python封装excel操作指南
2021/01/29 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
非功能性需求都包括哪些方面
2013/10/29 面试题
黄河象教学反思
2014/02/10 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
新学期开学标语2015
2015/07/16 职场文书
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
一文搞懂MySQL索引页结构
2022/02/28 MySQL