队列实现杨辉三角

如图:以下就是一个 杨辉三角图,其中是按照下一行是上一行的数之和得出的,例如第二行 1是第一行加0得出,第三行是第二行1加上0得出1,1加上1得到2,结尾都是1结束。现在我们用队列来实现这个规律,其中有两种方式:

第一种:从图中我们可以看出第几行就有几个数,也就是说第一行有1个数,第二行有2个数,第三行有3个数以此类推,我们就可以用两个循环来实现。

 上图:

 1 //打印杨辉三角
 2 function outyhui(n) {
 3 var queues=new queue();//定义一个队列
 4 queues.enqueue(1);//把起始值添加到队列中
 5 for (var i=1;i<=n;i++)//控制打印几层
 6 {
 7     var line="";//定义一个字符串进行存储每一行的值
 8     var pare=0;//定义每一行的第几个数的值
 9 for(var j=0;j<i;j++)//控制每一层有几个数
10 {
11   var curren= queues.dequeue();//队列进行抛出第一个值
12   line+=curren+" ";//把当前的值 进行添加到字符串中
13   var num=curren+pare;//进行计算下一行的值
14   pare=curren;//上一行中的第几个数的值
15  queues.enqueue(num)//把下一行的值添加到队列中
16 }
17 queues.enqueue(1)//循环之后还剩最后一个值不在队列中,所以当前行还需要添加1到队列中
18 console.log(line);//进行输出
19 }
20 }
21 outyhui(10)

第二种:每次打印一行的时候进行添加0到末尾进行识别是在第几行

function outhhui2(n)
{
    var que=new queue();
    que.enqueue(1);//队列第一行初始值
    que.enqueue(0);//末尾添加0区分
    for (var i=1;i<=n;i++)//打印几行
    {  var line="";//定义每一行输出的值
    var pre=0;//每行中的第几个数的值,当前进行初始值
    while (true)
    {
        var curren= que.dequeue();//队列中的值进行出列
        if(curren==0)//当前这个值如果为0则表示该行已经结束了
        {   que.enqueue(1);//进行添加每一行中的最后一个值
            que.enqueue(0);//队列中添加0进行区分
            break;
        }else {
            line+= curren+" ";//把当前的值添加到每一行中
            var nextcurren=curren+pre;//获取下一行中的数
            pre=curren;//上一行中第几个数的值
            que.enqueue(nextcurren);//把下一行的数添加到队列中
        }
    }
   console.log(line);
    }
}
outhhui2(10)

实现队列的方法

function queue() {
    var items=[];
    //添加队列元素
    this.enqueue=function (item) {
        items.push(item);
    }
    //移除队列元素
    this.dequeue=function () {
      return  items.shift();
    }
    //返回队列的头部
    this.head=function () {
        return items[0];
    }
    //队列的大小
    this.size=function () {
        return items.length;
    }
    //清空队列
    this.clear=function () {
       items=[];
    }
    //是否为空
    this.IsEnpty=function () {
        return items.length==0
    }
    //队列的尾节点
    this.tail=function () {
        return items[items.length-1];
    }
}

猜你喜欢

转载自www.cnblogs.com/97310ZT/p/9613409.html