队列实现杨辉三角

思想如下:

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);
    }
}
    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/weixin_42828324/article/details/81545371
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞