杨辉三角打印与队列之间的关系
- 杨辉三角有什么规律
- 队列的特点
- 思考之间的联系
答案:
- 杨辉三角的特点
- 除第一行外,其他各行两边得元素都是1
- 每行的行数和数字的数量相等,我们用n代替
- 每行除1之外的中间第1元素,是由上一行的第一个元素与第二个元素的和,第二个中心元素是第二个和第三个元素的和,以此类推
- 每行除1外的中间元素的数目=行数-2 ,2表示的是两边两个1
- 队列的特点
- 先入先出
- 可取队头队尾元素
- 联系
首先第一行,入队1
第二行 入队1,检查发现,不需要中心元素,对上一行元素出队列处理,入队1
第三行 入队1 判断需要一个中心元素(根据n-2),即上一行的第一个元素和第二个元素的和,将 上一行元素分别出栈add,temp,存储,相加,值进行这次的入队列,然后将第二个 出栈的值temp,赋给add(给第二个中心元素的出现,提供便利),检查不需要再 次中心元素 ,出循环
入队1
第四行 入队1 需要一个中心元素,即上一行的第一个元素和第二个元素的和,将上一行
元素分别出栈add,temp,存储,相加,值进行这次的入队列,然后将第二个出栈的 值,赋 给add,检查到中间元素还需要一个,则将继续出队列,并将其赋值给b,然 后将值继 续送入栈中,将temp赋给add,继续检查不需要中心元素,出循环
入队1
不断循环。。。
void yanghui(int N)
{
int i, n, temp, m, add;
LinkQueue Q;
InitQueue(Q);
m = N;//表示行数
n = 1;//
while (N >= n)
{
for (i = --m; i > 0; i--)
printf(" ");//预留空间
printf(" 1");//输出格式
EnQueue(Q, 1);//入队列
if (n == 1)
{
n++;
printf("\n");
continue;
}
DeQueue(Q, add);//出队列
for (i = 0; i < n-2; i++)
{
DeQueue(Q, temp);
printf(" %d", temp + add);
EnQueue(Q, add + temp);
add = temp;
}
printf(" 1\n");
EnQueue(Q, 1);
n++;
};
}