var pQueue = new PriorityQueue(); pQueue.enqueue('Mr.A', 3); pQueue.enqueue('Mr.B', 3); pQueue.enqueue('Mr.C', 3); console.log("原队列:"); pQueue.print(); pQueue.enqueue('VIP', 2); pQueue.enqueue('SVIP', 1); console.log("新队列:"); pQueue.print();
控制台打印:
循环队列
循环队列典型的例子击鼓传花
还记得在我上高中的时候我们晚自习一停电就玩这个
拿一个东西当“花”,轮着传,“鼓”一停,拿到花的同学就要站起来唱歌
可以把循环队列当作是队列的应用
下面我们来模拟实现循环队列击鼓传花
function hotPotato(pepoleList, frequency){ //参数:表示人的数组,传花的频率 var queue = new Queue(); for(var i = 0, len = pepoleList.length; i < len; i++){ queue.enqueue(pepoleList[i]); //初始化,进入队列 } var eliminated;//被淘汰的同学 while(queue.size() > 1){ //只要队列至少还有两个人,就一直循环 for(var i = 0; i < frequency; i++){//出队入队,模拟循环效果 queue.enqueue(queue.dequeue()); } eliminated = queue.dequeue();//清算 console.log(eliminated + '被淘汰'); } return queue.dequeue();//返回队列中的最后一人 } var pepole = ['Mr.A','Mr.B','Mr.C','Mr.D','Mr.E','Mr.F']; var gameWinner = hotPotato(pepole, 12); console.log('全场最佳:' + gameWinner);
控制台输出:
以上就是JavaScript下的队列实现。
我们还简单理解了两个特殊的队列:优先队列与循环队列。