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

来源:互联网 发布:wap淘宝流量真实吗 编辑:程序博客网 时间:2024/06/03 18:46
#include <stdio.h>#include <string.h>#define N 100#define OK 1#define ERROR 0int f[N]={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[N];    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;}

 

0 0
原创粉丝点击