用C语言实现杨辉三角(用队列打印)
时间: 2024-11-03 17:24:09 浏览: 83
在C语言中,杨辉三角是一种经典的组合数学问题,通常用于展示二项式系数。使用队列数据结构来打印杨辉三角可以简化程序结构,因为队列的特点是先进先出(FIFO),适合逐行添加元素并按顺序输出。
下面是一个简单的C语言函数,它使用队列来存储杨辉三角的每一行,并逐行打印:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct {
int front;
int rear;
int array[100];
} Queue;
void init_queue(Queue *q) {
q->front = -1;
q->rear = -1;
}
bool is_empty(Queue *q) {
return (q->front == -1);
}
void enqueue(Queue *q, int value) {
if ((q->rear + 1) % 100 == 0) {
printf("Queue overflow! Increasing size.\n");
q->array = realloc(q->array, sizeof(int) * 2 * q->rear + 1);
}
q->array[++q->rear] = value;
}
int dequeue(Queue *q) {
if (is_empty(q)) {
printf("Queue underflow!\n");
return -1;
} else {
return q->array[q->front++];
}
}
void print_pascal_triangle(int n, Queue *triangle_q) {
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= i; ++j) {
enqueue(triangle_q, triangle_q->array[i-j] ? triangle_q->array[i-j] : 1);
}
while (!is_empty(triangle_q)) {
printf("%d ", dequeue(triangle_q));
}
printf("\n");
}
}
int main() {
Queue triangle;
init_queue(&triangle);
// 调用print_pascal_triangle函数生成并打印杨辉三角
print_pascal_triangle(5, &triangle);
return 0;
}
```
这个程序首先初始化一个队列,并在`print_pascal_triangle`函数中计算每个位置的值然后添加到队列中。当一行结束时,它会从队列中取出并打印所有的元素。注意,这里我们假设队列的大小足够大,如果需要动态调整大小,已包含相应的错误处理。
阅读全文