C语言队列打印杨辉三角
时间: 2024-10-28 16:00:56 浏览: 31
在C语言中,杨辉三角是一个经典的动态数组问题,可以使用队列数据结构来实现。杨辉三角每一行都是前一行数字之和,并以0开始。以下是基本的步骤:
1. 定义一个队列,用于存储当前行的数据。
2. 初始化第一行和第二行,直接放入队列。
3. 循环生成后续的行数,直到达到所需的层数(比如n行)。
a. 创建一个新的队列,用于存放新行的元素。
b. 对于新行的第一个和最后一个元素,它们始终是前一行的最后一个元素(队头),值为1。
c. 对于中间的每个位置,元素值等于上两个位置的元素之和,从队列头部取出并入队列。
d. 当所有元素都添加到新队列后,将新队列替换旧队列,继续循环。
4. 每次从队列头部取出一个元素,它就是当前行的一个数字,打印出来。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX 100 // 根据需要调整队列大小
typedef struct {
int data[MAX];
int front; // 队首指针
int rear; // 队尾指针
} Queue;
// 队列操作函数
void init_queue(Queue* q) {
q->front = q->rear = -1;
}
int is_empty(Queue* q) {
return q->front == q->rear;
}
int is_full(Queue* q) {
return (q->front + 1) % MAX == q->rear;
}
void enqueue(Queue* q, int x) {
if (is_full(q))
return;
q->data[++q->rear] = x;
}
int dequeue(Queue* q) {
if (is_empty(q))
return -1;
return q->data[q->front++];
}
Queue* create_triangle(int n) {
Queue* queue = malloc(sizeof(Queue));
init_queue(queue);
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= i; ++j) {
if (j == 0 || j == i)
enqueue(queue, 1);
else
enqueue(queue, dequeue(queue) + dequeue(queue));
}
printf("\n");
while (!is_empty(queue)) {
printf("%d ", dequeue(queue));
}
printf("\n");
}
free(queue);
return NULL;
}
int main() {
int rows = 5;
create_triangle(rows);
return 0;
}
```
当你运行这个程序,会打印出指定层数(如5行)的杨辉三角。每次打印完一行后,队列会被更新,以便处理下一行。
阅读全文