用队列实现打印杨辉三角
问题介绍:
如果将二项式(a+b)^i(i=2,3,4……)展开,其系数排列成杨辉三角,如何实现各行系数的前n行打印出来,如下所示:
0 1 1 0 i=1
0 1 2 1 0 i=2
0 1 3 3 1 0 i=3
0 1 4 6 4 1 0 i=4
... i=...
问题分析:
杨辉三角从外形上有个很重要的特征——三角中的任意一个系数值(第一行除外)可以看成一个其肩膀上的两个系数之和;对于某一边侧肩膀上没有的系数地方,可以看作此处有个默认值0。因此求任意一行i(i>=2)的系数值时,可以由i-1行的系数值来获得,借助一个辅助的数据结构队列,事先将上一行的系数值入队列,包括默认的行末尾的系数0(行首默认的系数0预存在一个变量s中),利用出队列运算,每出一个系数t,利用他的值和前面刚出队列的系数值s之和得到下一行相应位置的系数值,并把刚得到的系数值入队列,并把t值赋给s,循环下去,可以得到所需指定行数的杨辉三角。具体算法如下。
算法:
void Yanghui_triangle(int n){
int s = 0;
int i;
PSeqQueue sq = Init_SeqQueue();
In_SeqQueue(sq,1);
In_SeqQueue(sq,1);
for (i = 1; i <= n; i++,s=0){