c语言用顺序队列打印杨辉三角
时间: 2024-10-29 19:00:35 浏览: 42
在C语言中,打印杨辉三角通常使用动态数组来模拟队列(实际上是后进先出的数据结构),因为杨辉三角的每一行都是前一行的组合,所以可以用队列存储当前行的数字,并逐步填充下一行。
首先,我们需要定义一个队列结构体,包含一个整数数组和两个指针(一个指向开始,一个指向结束)。然后,我们按照以下步骤创建并打印杨辉三角:
1. 初始化队列:创建一个大小为n+1的数组,n是三角形的最大行数。第一行只有一个元素1,所以队列只放一个元素。
2. 遍历队列:从第二行开始,对于每行i:
- 计算当前行的元素个数j(从0到i)
- 将每个元素依次加入队列,直到队列满(即队列长度达到i+1)。
- 读取并输出队首元素,然后将它移除(队尾元素自动成为新的队首)。
- 更新队列的剩余部分。
以下是简单的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int* queue;
int front; // 队头
int rear; // 队尾
int size;
} Queue;
// 初始化队列
Queue* init_queue(int n) {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->queue = (int*)malloc((n + 1) * sizeof(int));
q->front = 0;
q->rear = 0;
q->size = 1;
q->queue[0] = 1;
return q;
}
// 入队
void enqueue(Queue* q, int num) {
if (q->size == q->rear + 1) {
q->size *= 2;
q->queue = (int*)realloc(q->queue, q->size * sizeof(int));
}
q->queue[q->rear] = num;
q->rear++;
}
// 出队
int dequeue(Queue* q) {
int result = q->queue[q->front];
if (q->front == q->rear) {
free(q->queue);
free(q);
q = NULL;
} else {
q->front++;
}
return result;
}
// 打印杨辉三角
void print_pascal_triangle(int n) {
Queue* q = init_queue(n);
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= i - 1; j++) {
printf("%d ", dequeue(q)); // 输出队首元素
enqueue(q, dequeue(q) + dequeue(q)); // 添加当前行的下一个元素
}
printf("\n"); // 换行
}
}
int main() {
int n = 5;
print_pascal_triangle(n);
return 0;
}
```
运行此程序会打印出指定行数的杨辉三角。注意,这个代码片段并未处理队列溢出的情况,实际项目中应加上错误检查。
阅读全文