用C语言写:试利用链队列结构或循环队列结构完成打印输出杨辉三角形的前7行。(杨辉三角形每行可以左对齐)
时间: 2023-06-08 15:03:30 浏览: 163
可以使用循环队列结构来完成打印输出杨辉三角的前7行。以下是用C语言实现的示例代码:
#include <stdio.h>
#define MAXSIZE 200
typedef struct Queue{
int data[MAXSIZE];
int front, rear;
}Queue;
void InitQueue(Queue *Q){
Q->front = Q->rear = 0;
}
int QueueEmpty(Queue Q){
if(Q.front == Q.rear){
return 1;
}
return 0;
}
int QueueFull(Queue Q){
if((Q.rear+1) % MAXSIZE == Q.front){
return 1;
}
return 0;
}
void EnQueue(Queue *Q, int x){
if(QueueFull(*Q)){
printf("Queue is Full!\n");
return;
}
Q->data[Q->rear] = x;
Q->rear = (Q->rear+1) % MAXSIZE;
}
void DeQueue(Queue *Q, int *x){
if(QueueEmpty(*Q)){
printf("Queue is Empty!\n");
return;
}
*x = Q->data[Q->front];
Q->front = (Q->front+1) % MAXSIZE;
}
void PrintYangHui(int n){
Queue q1, q2; // 两个队列轮流存储杨辉三角的每一行
InitQueue(&q1);
InitQueue(&q2);
EnQueue(&q1, 1); // 初始化第一行为1
for(int i=1;i<=n;i++){
if(i%2 != 0){ // 第奇数行存储在q1中,打印后放入q2
while(!QueueEmpty(q1)){
int x;
DeQueue(&q1, &x);
printf("%-3d", x);
EnQueue(&q2, x);
if(!QueueEmpty(q1)){ // 除最后一个数外,每个数都是本行的值加上上一行的值
int y;
DeQueue(&q1, &y);
EnQueue(&q2, x+y);
}
}
printf("\n");
}
else{ // 第偶数行存储在q2中,打印后放入q1
while(!QueueEmpty(q2)){
int x;
DeQueue(&q2, &x);
printf("%-3d", x);
EnQueue(&q1, x);
if(!QueueEmpty(q2)){ // 除最后一个数外,每个数都是本行的值加上上一行的值
int y;
DeQueue(&q2, &y);
EnQueue(&q1, x+y);
}
}
printf("\n");
}
}
}
int main(){
PrintYangHui(7);
return 0;
}
阅读全文
相关推荐















