js数据结构之队列及其应用

对列,刚好和栈相反,它是先进先出的,只允许在队列的一头添加元素,另一头删除元素

class queue{
        constructor(){
            this.arr=[];
        }
        //插入元素
        enqueue(ele){
            this.arr.push(ele);
        }
        //删除元素
        dequeue(){
           return this.arr.shift();
        }
        //获取第一个元素
        find(){
            return this.arr[0];
        }
        //获得队列长度
        getLength(){
            return this.arr.length;
        }
        //获取队尾元素
        next(){
            return this.arr[this.arr.length-1];
        }
        //清空队列
        clear(){
            this.arr=[];
        }
        //判断是否为空
        isEmpty(){
            return this.arr.length===0
        }
    }

下面看下队列的应用,首先是约瑟夫环,把0-99依次插入队列,然后从0开始每隔2个数删除一个数,到对尾时再返回到对头重新开始,判断最后一个元素是哪个,下面来看下代码

var q=new queue();
    for(var i=0;i<100;i++){
        q.enqueue(i);
    }
    var index=0;
   while(q.getLength()>1){
       var item=q.dequeue()
       index++;
       if(index%3!==0){//如果队列的下标不是3的倍数,就把它重新插入队尾
           q.enqueue(item)
       }
   }
   console.log(q.find())//90

最后的结果是90

然后是斐波那契数列,即第3个数等于前两个数相加的和,如1,1,2,3...等等,下面来看下代码

function num(n){
       var index=0;
       var q=new queue();
       q.enqueue(1);
       q.enqueue(1);
       while(index<n-2){
           var item=q.dequeue();
           var item1=q.find();
           var x=item+item1;
           q.enqueue(x);
           index+=1;
       }
       q.dequeue();
       console.log(q.find())
    }
    num(4)//3

它是先获取并删除对头元素,然后再与队列的对头元素相加,再插入队列中,最后在删除对头元素,这样在队列里的对头元素就是斐波那契数列中要求的第几项

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值