这里,我们用的队列是循环队列。
解决这个问题很简单,打印一行,存一行
代码如下:
#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;
}