您的位置:首页 > 其它

第三章:队列及其应用之一---输出杨辉三角

2015-01-05 13:00 316 查看
#include <stdio.h>
#include <string.h>
#define N 100
#define OK 1
#define ERROR 0
int f
={0,1,1,0};
//使用一个队列输出n行杨辉三角;
/*
技巧:
为使第i行与第i+1行数据可以区分开,在两行之间放入一个数字0;
*/
void Print1(int n)
{
//自己的算法使用一个队列输出杨辉三角;
int i,j,m;
//n代表打印n行;
printf("这是一个打印杨辉三角的函数:\n");
i=1;j=4;
/*j=(j+1)%N;*/
while(n--)
{
do{
int t;
if(i==0) t=N-1;
else t=i-1;  //防止当i=0时,i-1溢出;
f[j]=f[i]+f[t];
if(f[j]) printf("%d  ",f[j]);
i=(i+1)%N;j=(j+1)%N;
m=i-1;
if(m==-1) m=N-1;
}while(f[m]);//当f[m]为0时,计算当下并在后面补0,并退出这一重循环;
f[j]=0;    j=(j+1)%N;
printf("\n");
}
}
typedef struct LinkList
{
int *x;
int base,top;
}LinkList;
LinkList L;
void ChuShi(LinkList &L)
{
//初始化队列函数;
L.x = new int
;
L.top=L.base=0;
printf("队列初始化完毕!\n");
}
void Jin(LinkList &L,int m)
{
//将数值m插入队尾;
L.x[L.base]=m;
L.base=(L.base+1)%N;
}
void Chu(LinkList &L,int &t)
{
//最前方的系数出队;
t=L.x[L.top];
L.top=(L.top+1)%N;
}
void yanghui(int n)
{
//书上的方法,也是使用一个队列输出杨辉三角,但具体操作有所不同!
/*
好处:
当你向队列中队尾加入元素的时候,只需要将值得多少传入函数中即可,
而不需要再去记录队尾的位置,这个在队列的结构体中自己有所体现!
*/
int i,j;
Jin(L,1);Jin(L,1);
int s=0,t;
for(i=1;i<=n;i++)
{
Jin(L,0);//各行之间插入一个0表示区分;
for(j=1;j<=i+2;j++)
{
//处理第i行的i+2个元素;
Chu(L,t);
Jin(L,s+t);
s=t;
if(j!=i+2) printf("%d  ",s);
}
printf("\n");
}
}
int main()
{
printf("请输入需要打印的杨辉三角的行数:\n");
int x;
scanf("%d",&x);
/*自己的方法:
printf("1   1\n");
Print1(x);
*/

//书上的方法:
ChuShi(L);
yanghui(x);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: