代码没有考虑杨辉三角的输出格式,代码如下: #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);}