当前位置: 首页 > Web前端 > JavaScript

算法介绍及简单练习——Queue

时间:2023-03-27 11:43:53 JavaScript

queue什么是队列?队列是一种特殊的线性表,只允许在队首删除节点,在队尾添加新元素。在我们的现实生活中,超市结账排队就是一个典型的例子。排队的第一个人结账后,在队列的最前面离开。想要退房的人需要进来排队等候。常用方法enqueue从队尾添加一个元素(我也检出来到队列)dequeue从队头删除一个元素(我检出离开队列)head返回头元素(我看看谁在最上面一排)Front)size返回队列的大小(有多少人在排队?)clear清空队列(11点了,该关门了,大家都离开队列)isEmpty判断队列是否为空(我看看有没有人在排队)tail返回队列的尾元素(我看看现在谁在最后)实现队列的逻辑功能Queue(){constitems=[]this.enqueue=function(item){items.push(item)}this.dequeue=function(){返回项目。转移()}这个。head=function(){returnitems[0]}这个。tail=function(){返回项目[项目。长度-1]}这个。size=function(){returnitems.length}this.clear=function(){items.length=0}this.isEmpty=function(){returnitems.length===0}}简单练习1.题目约瑟夫环需要一个数组a[100]存储0~99。要求每两个数字删除一个数字,从末尾的循环值开始继续寻找最后删除的数字。我们来分析一下思路,每两个删除一个元素,也就是删除第三个元素。因为题意循环结束后,需要从头再来。因此,我们可以借用队列的形式,将所有数据存储在队列中。通过循环队列和定义索引来记录当前位置。当索引是3的倍数时,我们删除该元素,否则我们重新将元素添加到队列的头部。这个循环一直持续到队列中只剩下一个元素为止。最后我们返回队列头部的元素,这就是我们最终的结果。代码实现consttest1=[5,6,7,8,9,10,0,1,2,3,4]consttest2=[]for(leti=0;i<100;i++)test2.push(i)functiondelRing(arrList){constqueue=newQueue()for(leti=0;i1){emptyQueue.enqueue(dataQueue.dequeue())}returndataQueue.dequeue()}this.top=function(){initQueue()returndataQueue.tail()}}4,杨辉三角思想我们定义一个队列,用于存放n-1行的元素和第n行的元素。例如现在循环到第二行,我们的队列中应该有[1,1,1]。在回收的时候,我们可以观察到每一行的数量等于行数。所以这里我们可以通过for语句来控制输出结果的个数为当前循环的行数,只输出n-1行的数据。保留当前n行的剩余数据,用于下一次计算。每次只输出上一行的数据。但是因为我们计算的每一行最后一个元素都少了,所以我们就在末尾加一个1。代码实现functionprintYangHui(n){constqueue=newQueue()queue.enqueue(1)for(leti=1;i<=n;i++){letoutput=""letpreValue=0for(letj=0;j