用队列实现杨辉三角

来源:互联网 发布:百度里可以申请域名 编辑:程序博客网 时间:2024/05/16 05:10

如题,首先,可以从杨辉三角可以知道,它的每个数等于它上方两数之和、每行第一个数和最后一个数都是1。
那么怎么用队列去实现它呢?
首先可以想到,队首和队尾分别指向相邻的两行。每当队首出一个元素,就生成一个队尾的元素入队。
那么问题来了,杨辉三角的特性可以知道:第n行比第n-1行多一个元素,这就导致入队和出队不匹配,每行入队的元素比出队的元素多一。
解决方案是,对于每行,都先把0先入队当成这行的第一个元素。这样入队和出队就平衡了。
具体实现思路:
1. 首先让0和1入队成为第一行。
2. 对于余下的每行,先让0入队
3. 每次先出一个元素和队首元素相加,总和入队。

具体的代码实现如下:

#include <stdio.h>#define MAX 1000struct Queue{    int sq[MAX];    int Front;    int Rear;}Queue;bool emty(){    if (Queue.Front == Queue.Rear)        return true;    else        return false;}int init_queue(){    Queue.Front = 0;    Queue.Rear = 0;    return 0;}int in_queue(int val){    Queue.sq[Queue.Rear] = val;    Queue.Rear++;    return 0;}int out_queue(){    if (emty())        return -1;    int v = Queue.sq[Queue.Front];    Queue.Front++;    return v;}int get_first(){    return Queue.sq[Queue.Front];}int main(){    int n;    scanf("%d",&n);    init_queue();    in_queue(0);    in_queue(1);    printf("%d\n", 1);    for (int i=1; i<=n; i++)    {        in_queue(0);        for (int j=0; j<=i; j++)        {            int v = out_queue();            v += get_first();            in_queue(v);            printf("%d ",v);        }        printf("\n");    }    return 0;}
原创粉丝点击