打印杨辉三角

来源:互联网 发布:大数据技术研究内容 编辑:程序博客网 时间:2024/04/27 20:17

代码没有考虑杨辉三角的输出格式,代码如下:

 

#include <stdio.h>
#include 
<stdlib.h>
#define OVERFLOW -2
#define INFEASIBLE -1
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
#define MAXQSIZE 10
typedef 
int QElemType;
struct SqQueue
{
    QElemType 
*base;
    
int front;
    
int rear;
}
;

int InitQueue(SqQueue *Q)
 
// 构造一个空队列Q
   Q->base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));
   
if(!Q->base// 存储分配失败
     exit(OVERFLOW);
   Q
->front=Q->rear=0;
   
return OK;
 }


int QueueEmpty(SqQueue Q)
 
// 若队列Q为空队列,则返回TRUE,否则返回FALSE
   if(Q.front==Q.rear) // 队列空的标志
     return TRUE;
   
else
     
return FALSE;
 }


int GetHead(SqQueue Q,QElemType *e)
 
// 若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR
   if(Q.front==Q.rear) // 队列空
     return ERROR;
   
*e=*(Q.base+Q.front);
   
return OK;
 }


int EnQueue(SqQueue *Q,QElemType e)
 
// 插入元素e为Q的新的队尾元素
   if((Q->rear+1)%MAXQSIZE==Q->front) // 队列满
     return ERROR;
   Q
->base[Q->rear]=e;
   Q
->rear=(Q->rear+1)%MAXQSIZE;
   
return OK;
 }


int DeQueue(SqQueue *Q,QElemType *e)
 
// 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR
   if(Q->front==Q->rear) // 队列空
     return ERROR;
   
*e=Q->base[Q->front];
   Q
->front=(Q->front+1)%MAXQSIZE;
   
return OK;
 }


void YangHuiTriangle(int N)
{
    SqQueue Q;
    
int n,i,temp,x;
    InitQueue(
&Q);
    EnQueue(
&Q,1);    //第1行元素入队
    for(n=2;n<=N;n++)
    
{
        EnQueue(
&Q,1);    //第n行第1个元素入队
        for(i=1;i<=n-2;i++)
        
{
            DeQueue(
&Q,&temp);
            printf(
"%3d",temp);//打印第n-1行元素    
            GetHead(Q,&x);
            temp
=temp+x;
            EnQueue(
&Q,temp);
        }

        DeQueue(
&Q,&x);
        printf(
"%3d ",x);
        EnQueue(
&Q,1);
    }

    
while(!QueueEmpty(Q))
    
{
        DeQueue(
&Q,&temp);
        printf(
"%3d",temp);
    }

}


void main()
{
    
int N;
    printf(
"请输入要打印的列数:");
    scanf(
"%d",&N);
    YangHuiTriangle(N);
}





 

原创粉丝点击