手机版

JavaScript队列、优先级队列、循环队列

时间:2021-09-12 来源:互联网 编辑:宝哥软件园 浏览:

队列是遵循先进先出原则的有序集合队列,在尾部添加新元素,从顶部移除元素

对队列的理解

我们生活中最常见的排队场景就是排队。队列的名字也很容易理解

它类似于堆栈,但队列是先进先出的数据结构

队列的前面是队列的头,队列的后面是队列的尾。

队列的创建

类似于栈,这里就不啰嗦了。我还需要实现一些功能。这辈子我就像排队上厕所一样

向队列中添加元素(进入队列)移除队列头元素(队列中最前面的人离开厕所)检查队列头元素(查看队列中最前面的人)以确定队列是否为空(查看队列中是否有任何人)移除所有团队元素(厕所被炸毁,它是分散的)检查堆栈中的元素数量(查看队列中有多少人),这样我们就可以创建一个完整的队列实现,并且还可以使用我们的数组来实现数组头

函数Queue(){ var items=[];this . enqueue=function(ele){ items . push(ele);};//将this . queue=function(){ return items . shift();};//将此取消队列。front=function(){ return items[0];};//检查队列头元素这个。isempty=function () {return items。长度===0;};//判断队列是否为空。这个。size=function () {return items。长度;};//队列大小this . clear=function(){ items=[];};//清空队列this . print=function(){ console . log(items . tostring());};//打印队列} var Queue=new Queue();//声明队列的实例队列的用法

让我们简单地用这个队列来模拟排队

var queue=新队列();Console.log('队列是否为空:' queue . isempty());排队。排队。排队。Console.log('当前队列:');queue . print();Console.log('出列:' queue . queue());Console.log('当前队列:');queue . print();控制台打印:

优先队列

我们排队上厕所的时候,一个拿着VIP会员卡的朋友来了,过了一会儿,一个拿着SVIP会员卡的朋友走过来,插在VIP面前

虽然这个比喻可能不太恰当,但生活中可能会有优先排队的情况。优先级高的人可以找到优先级低的人

这是循环队列

如果优先级值小的元素放在队列前面,称为最小优先级队列,而优先级值大的元素放在队列前面,称为最大优先级队列。但事实上,它们只是判断的改变。优先级队列和普通队列的区别在于,我们在进入队列时要判断优先级,需要对我们的元素进行处理。其他方法保持不变,即,将元素打包为具有优先级的对象。既然所有的物体都有相同的属性,我们无疑应该使用工厂建造。我们可以稍微修改我们的队列类,以实现最低优先级队列

函数PriorityQueue(){ var items=[];函数queele (ele,priority){//将我们的元素封装为一个对象this.ele=ele//元素this.priority=priority//优先级}这个。enqueue=function (ele,priority){ var queobj=new queele(ele,priority);//创建队列元素对象if(this.isEmpty()){ //如果队列为空,直接插入this . push(queObj);} else { var bAdded=falsefor(var i=0,len=items.length我透镜;i ){ if(优先项目[i]。优先级){ items.splice(i,0,queObj);//循环队列,如果优先级小于该位置元素的优先级,则插入bAdded=true打破;} } if(!bAdded){ items . push(queObj);//如果一个循环后找不到可以插队的位置,直接插入队列末尾} } };this . queue=function(){ return items . shift();};this . front=function(){ return items[0];};this . isempty=function(){ return items . length===0;};this . size=function(){ return items . length;};this . clear=function(){ items=[];};This.print=function () {//这个地方用var temp=[]稍微修改了一下;for(var i=0,len=items.length我透镜;i ){ temp.push(items[i])。ele);} console . log(temp . tostring());};}说明我已经在代码里说清楚了。让我们使用这个优先级队列来模拟队列上的WC

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();控制台打印:

循环排队

循环排队递包裹的典型例子还记得我高中的时候,晚上停电的时候我们就玩过这个。我们把某样东西当成“花”,当“鼓”停止时,拿到花的同学会站起来唱歌。我们可以使用循环队列作为队列应用程序。让我们模拟循环队列传递包裹的实现

函数hot potato(辣椒列表,频率){//参数:表示人的数组,花传的频率var Queue=new Queue();for(var i=0,len=pepoleList.length我透镜;I){ queue . enqueue(Pepolelist[I]);//初始化并进入队列} var消除;//被淘汰的同学while(queue.size() 1){ //只要队列中至少有两个人,则为(var I=0;I频率;I ){//走出队列,模拟循环效果queue . enqueue(queue . queue());}已消除=queue . queue();//清算console.log(已消除‘已消除’);} return queue . queue();//返回队列中最后一个人} var pepper=[' a先生',' b先生',' c先生',' d先生',' e先生',' f先生'];var GameWinner=HotPioto(pepole,12);console . log(‘全游戏最佳游戏赢家’);控制台输出:

以上是JavaScript下的队列实现。我们也简单理解两种特殊的队列:优先级队列和循环队列。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:JavaScript队列、优先级队列、循环队列是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。