打印杨辉三角形

 

#include "stdio.h"
#define maxsize 100
/*--------循环队列及操作如下------------ */
typedef int DataType;
typedef struct node{
    DataType data[maxsize];              /*循环队列的存储空间 */
    int front,rear;                     /*一个队头,队尾指针 */
    }seqQueue;

 void  InitQueue(seqQueue *sq){         /*初始化循环队列*/
     sq->front=0;
     sq->rear=0;
     }

 int LenghtQueue(seqQueue sq){         /*计算队列的长度 */
    return (sq.rear-sq.front+maxsize)%maxsize;
    }
 int IsEmpty(seqQueue sq){              /*判断队列是否为空 */
    if(sq.rear==sq.front)
         return 1;                       /*为空  */
    else
         return 0;                        /*不为空 */
         }

 void EnQueue(seqQueue *sq,DataType e){                /*进队  */
   if((sq->rear+1)%maxsize==sq->front){
        printf("插入错误!队满不能插入\n");
        return ;}
    sq->data[sq->rear]=e;
    sq->rear=(sq->rear+1)%maxsize;
    }
 void DeQueue(seqQueue *sq,DataType *e){            /*出队 */
    if(sq->rear==sq->front){
         printf("队列为空,出队错误!");
         return ;}
     *e=sq->data[sq->front];
     sq->front=(sq->front+1)%maxsize;
     }
 void GetFront(seqQueue sq,DataType *e){       /*获取队头元素 */
     *e=sq.data[sq.front];
     }

/*------------定义结束---------------------------------  */
/*---------------该函数为测试队列----------------------*/
void TesQueue(){
    int a[4]={1,2,3,4};
    int x,z,m;  int  i;
    seqQueue sq;
    InitQueue( &sq);
    for(i=0;i<4;i++)
        EnQueue(&sq,a[i]);
    for( i=0;i<4;i++) {
        DeQueue(&sq,&x);
        printf("%5d",x);
        }
     z= IsEmpty(sq);  printf("\n%5d",z);
        scanf("%d",z);
}
/*----------测试队列函数结束-------------------------*/

/*-----------打印杨辉三角形------------------------------*/
void YANGHUI(int n){
/*也就是打印(a+b)的n次方展开的系数*/
//添加第一行我是从二叉树的层次遍历中仿出来的
//二叉树只要提供一个根节点就可以根据访问所有的节点
    int i,j,k; int s,t,e;
    seqQueue sq; InitQueue(&sq);  //假设开始的一行的元素为1
    s=1; EnQueue(&sq,0);    //人为的为每一行添加一个0
 EnQueue(&sq,1);      //该行不打印出来
    for(i=1;i<=n;i++){
   EnQueue(&sq,0);    /*每一行的开始都人为的添加一个0*/
         printf("\n");          
        for(k=1;k<=n-i;k++)
            printf("  ");
        for(j=1;j<=i+1;j++){
            DeQueue(&sq,&t);   /*删除队头元素,*/
            GetFront(sq,&s);
            printf("%4d",s+t);
            EnQueue(&sq,s+t);   //插入队列的元素为前2个栈元素之和
  }  
  printf("\t\t%d",LenghtQueue(sq));
      }
  printf("\n");
}


 /*-----------------杨辉三角形结束----------------------*/

 /*--------------------main-----------------------*/
 void main(){
  int n;
  printf("请输入一个正整数:\n\t\t");
  scanf("%d",&n);
     YANGHUI(n);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值