C语言队列操作实现输出杨辉三角的程序
时间: 2023-10-13 14:04:51 浏览: 63
好的,让我来为您解答。下面是一个基于队列实现输出杨辉三角的 C 语言程序:
```c
#include<stdio.h>
#include<stdlib.h>
// 定义队列结构体
typedef struct {
int *data;
int front, rear;
} Queue;
// 初始化队列
void initQueue(Queue *q, int size) {
q->data = (int *)malloc(sizeof(int) * size);
q->front = q->rear = 0;
}
// 入队操作
int enQueue(Queue *q, int e) {
q->data[q->rear++] = e;
return 1;
}
// 出队操作
int deQueue(Queue *q, int *e) {
if (q->front == q->rear) return 0;
*e = q->data[q->front++];
return 1;
}
// 输出杨辉三角
void printTriangle(int n) {
Queue q1, q2;
int i, j, a, b;
// 初始化两个队列
initQueue(&q1, n);
initQueue(&q2, n);
// 第一行
enQueue(&q1, 1);
for (i = 1; i <= n; i++) {
// 输出当前行
for (j = 0; j < n - i; j++)
printf(" ");
while (deQueue(&q1, &a)) {
printf("%3d", a);
// 计算下一行元素值
if (deQueue(&q1, &b)) {
enQueue(&q2, a + b);
enQueue(&q1, b);
}
}
printf("\n");
// 将第二行元素移动到第一行
while (deQueue(&q2, &a)) enQueue(&q1, a);
// 在队列尾部添加 0 表示下一次计算已结束
enQueue(&q1, 0);
}
// 释放队列内存
free(q1.data);
free(q2.data);
}
int main() {
int n;
printf("请输入杨辉三角行数:");
scanf("%d", &n);
printTriangle(n);
return 0;
}
```
该程序使用两个队列,依次存储杨辉三角每一行的元素值。输出一行后,将第二个队列中的元素移动到第一个队列中,然后在第一个队列尾部添加一个 0,表示下一行的计算已结束。程序最终输出一个 n 行的杨辉三角。