循环队列打印杨辉三角

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/KobeSacre/article/details/83930997

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<iomanip>
#include<queue>

typedef long long ll;
const int inf = 0x3f3f3f3f;

using namespace std;

#define maxsize 600

typedef struct{
    int *base;
    int front,rear;
}que;

int init(que &q){

    q.base = (int *)malloc(sizeof(int) * maxsize);
    if(!q.base)
    {
        printf("分配内存失败!\n");
        return 0;
    }

    else
    {

        q.front = 0;
        q.rear = q.front;
        return 1;
    }

}

int push(que &q,int val){

    if(q.rear + 1 % maxsize == q.front)
    {
        printf("队列已满!\n");
        return 0;
    }

    else
    {

        q.base[q.rear] = val;
        q.rear = (q.rear + 1) % maxsize;

        return 1;
    }

}

int pop(que &q,int &val){

    if(q.front == q.rear)
    {
        printf("队列为空!\n");
        return 0;
    }

    else
    {

        val = q.base[q.front];
        q.front = (1 + q.front) % maxsize;

        return 1;
    }

}

int main(){

    que q;
    init(q);

    int n,temp,now;
    scanf("%d",&n);
    push(q,1);    //将第一行的1入队

    for(int i = 2;i <= n;i++)    //从第二行到第n行的入队操作,以及打印第i - 1行的所有元素
    {

        push(q,1);        //每一行的第一个元素
        for(int j = 1;j <= i - 2;j++)    //求第2个到i - 1个元素的值
        {

            pop(q,temp);
            printf("%-3d ",temp);        //打印上一行的元素    执行i - 2次循环 而上一行有i - 1个元素
            now = q.base[q.front];
            push(q,now + temp);

        }

        pop(q,temp);        
        printf("%-3d\n",temp);        //打印上一行的最后一个元素
        push(q,1);            //将本行的最后一个元素入队
    }

    for(int i = 1;i <= n;i++)        //打印第n行元素
    {
        pop(q,temp);
        printf("%-3d ",temp);
    }
    printf("\n");

    free(q.base);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/KobeSacre/article/details/83930997
今日推荐