zoukankan      html  css  js  c++  java
  • 队列实现杨辉三角

    如图:以下就是一个 杨辉三角图,其中是按照下一行是上一行的数之和得出的,例如第二行 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];
        }
    }
  • 相关阅读:
    gc buffer busy/gcs log flush sync与log file sync
    给Oracle年轻的初学者的几点建议
    Android 编程下帧动画在 Activity 启动时自动运行的几种方式
    Android 编程下 Touch 事件的分发和消费机制
    Java 编程下 static 关键字
    Java 编程下 final 关键字
    Android 编程下模拟 HOME 键效果
    Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
    Extjs4 大型项目目录结构重构
    [转]SQLServer 2008 允许远程连接的配置方法
  • 原文地址:https://www.cnblogs.com/97310ZT/p/9613409.html
Copyright © 2011-2022 走看看