用队列打印杨辉三角形
时间: 2023-12-24 22:24:46 浏览: 137
好的,打印杨辉三角形可以使用队列来实现。具体实现方法如下:
首先,我们需要定义一个队列结构体,用来存储每一行的数字。队列中的元素可以是int类型。
```
typedef struct {
int *data; // 存储队列中的元素
int head; // 队首指针
int tail; // 队尾指针
int size; // 队列的大小
} Queue;
```
接下来,我们需要实现队列的初始化、入队、出队等操作。这里我们使用循环队列来实现。
```
// 初始化队列
void initQueue(Queue *q, int size) {
q->data = (int *)malloc(sizeof(int) * size);
q->head = q->tail = 0;
q->size = size;
}
// 判断队列是否为空
int isEmpty(Queue *q) {
return q->head == q->tail;
}
// 入队
void enqueue(Queue *q, int x) {
q->data[q->tail] = x;
q->tail = (q->tail + 1) % q->size;
}
// 出队
int dequeue(Queue *q) {
int x = q->data[q->head];
q->head = (q->head + 1) % q->size;
return x;
}
```
有了队列的基本操作,我们就可以开始打印杨辉三角形了。具体实现方法如下:
```
void printYangHuiTriangle(int n) {
Queue q;
initQueue(&q, n + 1); // 队列的大小为n+1
// 第一行
enqueue(&q, 1);
// 从第二行开始打印
for (int i = 2; i <= n + 1; i++) {
int pre = 0; // 上一行的数字
for (int j = 0; j < i - 1; j++) {
int x = dequeue(&q); // 出队
printf("%d ", x + pre); // 打印当前数字
pre = x; // 更新上一行的数字
enqueue(&q, x + pre); // 入队
}
printf("\n");
enqueue(&q, 1); // 每行最后一个数字为1
}
}
```
这样,我们就可以通过队列来打印杨辉三角形了。调用printYangHuiTriangle函数,传入需要打印的行数即可。
阅读全文