之前我已经写了两篇关于队列的基本功能,今天我们使用循环顺序队来实现输出杨辉三角。

这是我们最终想要的效果:*

目录

  • 一.算法思路
    • 二.代码实现
      • 三. 思考总结

一.算法思路

这里我将使用图示法配合文字。

很显然,我们需要一个一个具有某种控制条件的循环来完成这个功能。

首先

这里我们得需要四个变量,

    int line = 7;//杨辉三角的行数int value;int temp=0;int back;//接受SQPop函数(出栈函数)的返回值

因为我们需要知道我们要多少层的杨辉三角,所以在头部加一个for循环用于控制层数。

for (int i = 1; i < line; )

注:这里先不加i++,因为什么时候换行是需要更复杂的条件判断的

接着

完成前期工作后,我们把首行的两个元素入队,也就是两个1,但还不够,我们还得入队一个0,具体作用稍后再说。如下图:

步骤一:出栈

将首元素出队,并把其中的值赋给value

     s.SQPop(back);value = back;

步骤二:加和后入队
将temp与value加和后的值 入队

 s.SQPush(temp+value);

步骤三:判断value的值
若此时value的值不是0,那么就输出value.
若为0,另作评判(之后讲)

if (value != 0){cout << value <<" ";}

步骤四:赋值
将value的值赋给temp

 temp = value;

至此,我们已经遍历了一遍程序,接下来的思路基本一致:

步骤一:出队
将首元素出队,并把其中的值赋给value
步骤二:加和后入队
将temp与value加和后的值 入队
步骤三:判断value的值
若此时value的值不是0,那么就输出value.
若为0,另作评判(之后讲)
步骤四:赋值
将value的值赋给temp

进行到这里时,我们已经,输出了两个1了,也就是说,我们完成了第一行的输出,但问题来了,我们该如何换行,这里就体现了0的妙处了。

现在,我们开始第三次遍历程序:

步骤一:出队
将首元素出栈,并把其中的值赋给value
步骤二:加和后入队
将temp与value加和后的值 入队

步骤三:判断value的值
若value的值为0,那么代表一行的结束,我们应该换行,并让i+1,最后,我们还得再入队一个0,为下次换行做准备。

else{cout << endl;s.SQPush(0);i++;}

步骤四:赋值**
将value的值赋给temp


遍历完三遍,所有的情况都遇过了,我们也基本清除了该算法的基本过程,接下来按照这个规则推理即可。

二.代码实现

关于代码,这里只展示核心部分。
其他关于入队,出队,初始化的操作请移步我之前的文章。

附上链接
顺序队与链队(一)

#include"SqQueue.h"void test()
{SQ s;s.SQInit();//杨辉三角的过程int line = 7;//杨辉三角的行数int value;int temp=0;int back;//接受SQPop函数的返回值s.SQPush(1);s.SQPush(1);s.SQPush(0);for (int i = 1; i < line; ){//出栈s.SQPop(back);value = back;s.SQPush(temp+value);if (value != 0){cout << value <<" ";}else{cout << endl;s.SQPush(0);i++;}temp = value;}cout << endl;
}int main()
{test();return 0;
}

三. 思考总结

说实话这个方法很巧,但不容易想到,因此我要注重积累,多看别人的方法,说不定这个方法可以移植到其他的场景。

队列实现杨辉三角(附详细图解)相关推荐

  1. java数据结构队列杨辉三角_使用队列实现杨辉三角

    使用队列实现杨辉三角 杨辉三角的特点: 除了第一行,其他行两端都为1: 从第三行开始可以看出,除了两端,其中每个数都是元素本身上面对着的两个数的和: 奇数行有奇数个数,偶数行有偶数个数,都是n个数 每 ...

  2. 【练习】c++分别用链队列和普通队列输出杨辉三角

    普通队列: class queue {public:queue();bool empty()const;bool full() const;int get_front(int& x)const ...

  3. 杨辉三角队列c语言程序,C语言完整队列 与链式队列实现杨辉三角

    贵州商专/// 编译环境VS2010 #include "stdafx.h" #include "stdlib.h" #define M 100 int max ...

  4. 【数据结构(C++)】用链队列计算杨辉三角

    目录 第一节 概述 第二节 开源代码 第一节 概述 杨辉三角是二项式系数在三角形中的一种几何排列,是中国古代数学的杰出研究成果之一.它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出 ...

  5. 利用队列输出杨辉三角 C语言

    #include<stdio.h> #include<stdlib.h>#define MAXQSIZE 200typedef int QElemType;typedef st ...

  6. c++/c语言 杨辉三角(详细讲解)。

    杨辉三角如下图形式 但是有什么方法可以打出此图呢? 我们可以把空位都补为0,从而找出其中的规律. 空位补0后就如下图所示. 我们把行数和列数分别设为 r 和 c : 在上图中我们可以发现: r = 4 ...

  7. 杨辉三角超详细小解三种方法--《Blind-Stab》

    杨辉三角,是二项式系数在三角形中的一种几何排列.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年.杨辉三角是中国古代 ...

  8. 数据结构--队列Queue--打印杨辉三角

    杨辉三角大家很熟悉,不做介绍了,第n行的首末两元素均为1,中间n-2个元素由n-1行相邻两元素相加得到. 将第1行数据入队(1) -------队列表示(队头,- 队尾)------- 第2行数据1入 ...

  9. 20162303 队列加分项-杨辉三角

    要求 用实现循环队列 参考PPT用循环队列打印杨辉三角 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息 把代码推送到代码托管平台 把完成过程写一篇博客:重点是单步跟踪过程和遇到 ...

最新文章

  1. 模拟电子技术_清华大学华成英教授主讲之符号说明
  2. Linux SVN 命令详解
  3. Nacos源码HostReactor
  4. c#winform控件过多卡顿问题解决方案
  5. ucosii事件控制块------信号量集
  6. 中国双导体发热电缆行业市场供需与战略研究报告
  7. eclipse启动时JDK环境变量报错
  8. Java程序员需要注意的五大Docker误区
  9. 数据挖掘10大算法(1)——PageRank
  10. Raki的nlp-begginer 提问
  11. 出租车计费程序php,出租车计价器VHDL程序
  12. JavaScript 教程+代码(下)
  13. 天马行空 | 假如上网装X需要花钱?
  14. 【数据恢复案例】.[decrypt20@firemail.cc].eking新型变种勒索病毒
  15. Source Insight 4.0.0086 Patched
  16. WiKi融入电子表格软件 互联网发展大势所趋
  17. IC卡和ID卡的区别
  18. [Oracle] 一个通过添加本地分区索引提高SQL性能的案例
  19. [附相应图片]HTML+CSS学成网首页制作基础案例
  20. Bootstrap字体图标

热门文章

  1. 【包邮送书活动】20211018期-开奖通知
  2. php 查询数据表第2条,PHP 连接 MySQL 数据库的连接函数 mysql_connect 的第二个参数是( )。...
  3. Unity UGUI图集打包与动态使用(TexturePacker)
  4. Unity中使用TexturePacke打包的图集
  5. 盘点:2012年微博引爆的十大热点(组图)
  6. 全国计算机等级报名登记表,全国计算机等级考试报名报名流程
  7. 【Vim】将Cpas_Lock 与 Esc 键进行互换
  8. 公开募集催生Namco Bandai(南梦宫万代)的预售实验
  9. java 8——Stream
  10. window7取消文件默认打开方式的方法