队列实现杨辉三角(附详细图解)
之前我已经写了两篇关于队列的基本功能,今天我们使用循环顺序队来实现输出杨辉三角。
这是我们最终想要的效果:*
目录
- 一.算法思路
- 二.代码实现
- 三. 思考总结
一.算法思路
这里我将使用图示法配合文字。
很显然,我们需要一个一个具有某种控制条件的循环来完成这个功能。
首先,
这里我们得需要四个变量,
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;
}
三. 思考总结
说实话这个方法很巧,但不容易想到,因此我要注重积累,多看别人的方法,说不定这个方法可以移植到其他的场景。
队列实现杨辉三角(附详细图解)相关推荐
- java数据结构队列杨辉三角_使用队列实现杨辉三角
使用队列实现杨辉三角 杨辉三角的特点: 除了第一行,其他行两端都为1: 从第三行开始可以看出,除了两端,其中每个数都是元素本身上面对着的两个数的和: 奇数行有奇数个数,偶数行有偶数个数,都是n个数 每 ...
- 【练习】c++分别用链队列和普通队列输出杨辉三角
普通队列: class queue {public:queue();bool empty()const;bool full() const;int get_front(int& x)const ...
- 杨辉三角队列c语言程序,C语言完整队列 与链式队列实现杨辉三角
贵州商专/// 编译环境VS2010 #include "stdafx.h" #include "stdlib.h" #define M 100 int max ...
- 【数据结构(C++)】用链队列计算杨辉三角
目录 第一节 概述 第二节 开源代码 第一节 概述 杨辉三角是二项式系数在三角形中的一种几何排列,是中国古代数学的杰出研究成果之一.它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出 ...
- 利用队列输出杨辉三角 C语言
#include<stdio.h> #include<stdlib.h>#define MAXQSIZE 200typedef int QElemType;typedef st ...
- c++/c语言 杨辉三角(详细讲解)。
杨辉三角如下图形式 但是有什么方法可以打出此图呢? 我们可以把空位都补为0,从而找出其中的规律. 空位补0后就如下图所示. 我们把行数和列数分别设为 r 和 c : 在上图中我们可以发现: r = 4 ...
- 杨辉三角超详细小解三种方法--《Blind-Stab》
杨辉三角,是二项式系数在三角形中的一种几何排列.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年.杨辉三角是中国古代 ...
- 数据结构--队列Queue--打印杨辉三角
杨辉三角大家很熟悉,不做介绍了,第n行的首末两元素均为1,中间n-2个元素由n-1行相邻两元素相加得到. 将第1行数据入队(1) -------队列表示(队头,- 队尾)------- 第2行数据1入 ...
- 20162303 队列加分项-杨辉三角
要求 用实现循环队列 参考PPT用循环队列打印杨辉三角 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息 把代码推送到代码托管平台 把完成过程写一篇博客:重点是单步跟踪过程和遇到 ...
最新文章
- 模拟电子技术_清华大学华成英教授主讲之符号说明
- Linux SVN 命令详解
- Nacos源码HostReactor
- c#winform控件过多卡顿问题解决方案
- ucosii事件控制块------信号量集
- 中国双导体发热电缆行业市场供需与战略研究报告
- eclipse启动时JDK环境变量报错
- Java程序员需要注意的五大Docker误区
- 数据挖掘10大算法(1)——PageRank
- Raki的nlp-begginer 提问
- 出租车计费程序php,出租车计价器VHDL程序
- JavaScript 教程+代码(下)
- 天马行空 | 假如上网装X需要花钱?
- 【数据恢复案例】.[decrypt20@firemail.cc].eking新型变种勒索病毒
- Source Insight 4.0.0086 Patched
- WiKi融入电子表格软件 互联网发展大势所趋
- IC卡和ID卡的区别
- [Oracle] 一个通过添加本地分区索引提高SQL性能的案例
- [附相应图片]HTML+CSS学成网首页制作基础案例
- Bootstrap字体图标
热门文章
- 【包邮送书活动】20211018期-开奖通知
- php 查询数据表第2条,PHP 连接 MySQL 数据库的连接函数 mysql_connect 的第二个参数是( )。...
- Unity UGUI图集打包与动态使用(TexturePacker)
- Unity中使用TexturePacke打包的图集
- 盘点:2012年微博引爆的十大热点(组图)
- 全国计算机等级报名登记表,全国计算机等级考试报名报名流程
- 【Vim】将Cpas_Lock 与 Esc 键进行互换
- 公开募集催生Namco Bandai(南梦宫万代)的预售实验
- java 8——Stream
- window7取消文件默认打开方式的方法