一、基础知识
二、代码实现
#include<stdio.h>
#include<stdlib.h>
#define maxsize 40
struct dd
{
int data[maxsize];
int f,r;
struct dd*next;
} ;
struct dd* init();
int full(struct dd*q);
int empty(struct dd*q);
int enter(struct dd*q,int x);
int delet(struct dd*q,int *x);
int get(struct dd*q,int *x);
void yh(int n);
//构造一个空的循环链表
struct dd* init()
{
struct dd*q,*head;
q=(struct dd*)malloc(sizeof(struct dd));
if(q!=NULL)
{
q->f=0;
q->r=0;
}
return q;
}
//判断队是否满
int full(struct dd*q)
{
if((q->r+1)%maxsize==q->f)
return 1;
else
return 0;
}
//判断队是否空
int empty(struct dd*q)
{
if(q->f==q->r)
return 1;
else
return 0;
}
//入队
int enter(struct dd*q,int x)
{
if(full(q))
return 0;
q->data[q->r]=x;//插入x
q->r=(q->r+1)%maxsize;//队尾指针加1
return 1;
}
//出队
int delet(struct dd*q,int *x)
{
if(empty(q))
return 0;
*x=q->data[q->f];//删除x
q->f=(q->f+1)%maxsize;//队头指针减1
return 1;
}
//取队头数据元素
int get(struct dd*q,int *x)
{
if(q->r==q->f)
return 0;
else
{
*x=q->data[q->f];
return 1;
}
}
//杨辉三角
void YHSJ(int n)
{
struct dd*q;
int x1,x2;
int i,j;
q=init();
printf("%5d\n",1);//第1行第1列
enter(q,1);
enter(q,1);//第2行2个1
for(i=2;i<=n;i++)
{
enter(q,1);//i+1行第1列的1
for(j=0;j<=i-2;j++)//打印第i行生成i+1行 入队
{
delet(q,&x1);//第i行第1个数出队
get(q,&x2);
printf("%5d",x1);
enter(q,x1+x2);
}
delet(q,&x2);
printf("%5d\n",x2);
enter(q,1);
}
}
int main()
{
int n;
printf("请输入杨辉三角的行数:\n");
scanf("%d",&n);
YHSJ(n);
return 0;
}