思想如下:
1>首先,需要初始化一个队列,即对头=队尾=0;
2>将第一行的元素1入队,接着操作第二行(一二行不需要求和操作,直接将元素入队即可);
3>从第三行开始,现在的队头指向N-1行,先将每行的固定元素1入队,然后循环操作求和过程:
将队首元素出队,并保存它的值temp;
获取当前队首的元素x,并进行temp=temp+x,且将temp入队;
4>循环结束后,队首在N-1行的最后一个元素处,现将其出队,然后将每行最后的固定元素1入队;
5>循环3、4步就可以输出杨辉三角形了。
代码如下:
# include<stdio.h>
# define M 100
typedef struct
{
int a[M];
int front,rear;
}sq;
void init(sq *q)
{
q->rear=q->front=0;
}
int enter(sq *q,int x)
{
if((q->rear+1)%M==q->front)
{
return 0;
} else
{
q->a[q->rear]=x;
q->rear=(q->rear+1)%M;
return 1;
}
}
int delet(sq *q,int *x)
{
if(q->front==q->rear)
{
return 0;
} else
{
*x=q->a[q->front];
q->front=(q->front+1)%M;
return 1;
}
}
int get(sq *q,int *x)
{
if(q->front==q->rear)
{
return 0;
} else
{
*x=q->a[q->front];
return 1;
}
}
void main()
{
sq q;
int n,m,i,x,y;
init(&q);
printf("请输入杨辉三角的行数\n");
scanf("%d",&m);
enter(&q,1);
for (n=2;n<=m;n++)
{
enter(&q,1);
for (i=1;i<=n-2;i++)
{
delet(&q,&x);
printf("%d ",x);
get(&q,&y);
y=y+x;
enter(&q,y);
}
delet(&q,&x);
printf("%d",x);
printf("\n");
enter(&q,1);
}
while(q.front!=q.rear)
{
delet(&q,&x);
printf("%d ",x);
}
}