#include "stdlib.h"
//声明队列类型
typedef struct node
{
int data[21];
int head,rear;
}sequeue;
int num;//杨辉三角的层数
//队列的初始化
void initial(sequeue *sq)
{
sq->head=-1;
sq->rear=-1;
}
//进队操作
void ensequeue (sequeue *sq,int data1,int data2)
{
sq->rear++;
sq->data[sq->rear]=data1+data2;
}
//出队操作
int desequeue(sequeue *sq)
{
return sq->data[++sq->head];
}
//求扬辉三角的第n行,将其存入队列sq2指向的结点中
sequeue * fun(int n,sequeue *sq1)
{
int data1,data2=0,i;
sequeue *sq2;
sq2=(sequeue *)malloc(sizeof(sequeue));
initial(sq2);
//输出每行前的空格以形成三角格式
for (i=0;i<num-n;i++)
printf(" ");
//输出存储在队列中的某行元素,并计算下一行数
while(sq1->head!=sq1->rear)
{
data1=desequeue(sq1);
//处理两树之间的间隔距离
if (data1<10) printf(" %d",data1);
else if (data1<100) printf(" %d",data1);
else if (data1<1000) printf(" %d",data1);
else printf(" %d",data1);
ensequeue(sq2,data1,data2);
data2=data1;
}
sq2->data[++sq2->rear]=1;
printf("\n");
free(sq1);
return sq2;
}
int main(int argc,char *argv[])
{
int i;
sequeue *sq=(sequeue *)malloc (sizeof(sequeue));
initial(sq);
sq->rear++;
sq->data[sq->rear]=1; //将第一行存入队列中,第一行只有1一个元素
printf("please put in a integer number(no more then 15)!\n\t");
scanf("%d",&num);
//fun()函数实现输出一行元素并计算出下一行各个元素,经过num次调用fun函数输出num层杨辉三角
for (i=0;i<num;i++)
sq=fun(i,sq);
return 0;
}
温馨提示:答案为网友推荐,仅供参考