队列基础 (用队列打印杨辉三角)

       这里,我们用的队列是循环队列。

       解决这个问题很简单,打印一行,存一行

       代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define MaxSize 10    // 代码只能打印9行

typedef struct
{
        int data[MaxSize];
        int front;
        int rear;
}SqQueue;

void InitQueue(SqQueue *Q)
{
     Q->front=0;
     Q->rear=Q->front;
}

int EnQueue(SqQueue *Q , int e)
{
     if( (Q->rear+1)%MaxSize == Q->front )
     {
             printf("Full!");
             return 0;
     }
     else
     { 
         Q->rear=(Q->rear+1)%MaxSize;
         Q->data[Q->rear]=e;
         return 1;
     }
}

int OutQueue(SqQueue *Q , int *e)
{
    if( Q->front==Q->rear )
    {
        printf("Vacant!");
        return 0;
    }
    else
    {
        Q->front=(Q->front+1)%MaxSize;
        (*e)=Q->data[Q->front];
        printf("%d ",(*e));
        return 1;
    }
}

int UseQueue(SqQueue *Q , int *e)
{
    if( Q->front==Q->rear )
    {
        printf("Vacant!");
        return 0;
    }
    else
    {
        *e=Q->data[(Q->front+1)%MaxSize];
        return 1;
    }
}

void Printftrangle( int N )
{
     SqQueue Q;
     InitQueue(&Q);
     int i,j,x,y,z,n;
//     int N=1;
     EnQueue(&Q,1);
     for(n=1;n<N;n++)
     {
               EnQueue(&Q,1);
               for(i=1;i<=n-1;i++)
               {
                          OutQueue(&Q,&x);
                          UseQueue(&Q,&y);
                          z=x+y;
                          EnQueue(&Q,z);
               }
               OutQueue(&Q,&x);
               putchar(10);
               EnQueue(&Q,1);
     }
     while(Q.front!=Q.rear)
     {
                     OutQueue(&Q,&j);                
     }
}

int main()
{
    int N;
    scanf("%d",&N);
    Printftrangle(N);
    getchar();
    getchar();
    return 0;
}

 

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/yaoerm9/article/details/8087423
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞