一、队列的定义

二、队列办法

三、js实现办法如下

//队列 一种先进先出的数据结构var Queue = function(){  //用数组来模仿 首元素为队头,尾元素为队尾  var items = []  //入队  this.enqueue = function(element){    items.push(element)  }  //出队  this.dequeue = function(){    return items.shift()  }  //查看队列头  this.front = function(){    return items[0]  }  //队列长度  this.size = function(){    return items.length  }  //判断是否为空  this.isEmpty= function(){    return items.length == 0  }}

四、实战演练

1.击鼓传花

有多个玩家进行击鼓传花,每位玩家顺次开始击鼓,击一次鼓传花一次,并且计数加1(从0开始),当有玩家击鼓后,计数为3时,则淘汰该玩家,计数归0,持续进行上述过程,直到残余一名玩家为胜利者,游戏完结。

code

//击鼓传花var setFlowerParams = function(user, number){  var passFlower = new Queue()//初始化队列for(var i = 0 ; i < user.length ; i++){  passFlower.enqueue(user[i])}//循环队列while( passFlower.size() > 1){  for(var i = 0; i < number - 1; i++){    passFlower.enqueue(passFlower.dequeue())   }  var taotai = passFlower.dequeue()  console.log('淘汰' + taotai) } return console.log('最终玩家' + passFlower.front())} var user = []

运行后果

2.优先队列

在队列依据元素的优先级从大到小进行排序

code

//优先队列var PriorityQueue = function(){  var items = []  var add = false  //辅助类  var QueueItem = function(element, priority){    this.element = element    this.priority = priority  }  this.enqueue = function(element, priority){    var queueItem = new QueueItem(element, priority)    for(var i = 0 ; i < items.length ; i++){    if(queueItem.priority > items[i].priority){      items.splice(i, 0, queueItem)      add = true      break      }    }    if(!add){      items.push(queueItem)    }  }  //查看队列  this.getItems = function(){    return items  }}var priorityqueue = new PriorityQueue()priorityqueue.enqueue('张飞', 10)priorityqueue.enqueue('关羽', 20)priorityqueue.enqueue('刘备', 30)

运行后果

排序后