这里,我们用的队列是循环队列。
解决这个问题很简单,打印一行,存一行
代码如下:
#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;
}
本文介绍如何使用循环队列来实现杨辉三角的打印功能。通过定义结构体并实现初始化、入队、出队及获取队头元素等操作,代码能够按行打印出指定行数的杨辉三角形。
970

被折叠的 条评论
为什么被折叠?



