队列的应用—打印杨辉三角形(以等腰三角形形式输出)C语言程序
时间: 2024-10-28 14:11:49 浏览: 48
队列可以用来打印杨辉三角形(Pascal's Triangle),这是因为杨辉三角形的每一行都是前一行数字之和形成的,恰好符合队列先进先出的特点。我们可以使用一个数组来存储当前行的数字,然后从队列的头部取出数并加到下一行对应位置,每行结束后将当前行的所有元素入队。
下面是一个简单的C语言程序示例,它使用了一个队列结构来打印前n行的杨辉三角形:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义队列数据结构
typedef struct {
int *data;
int front, rear;
int capacity;
} Queue;
// 初始化队列
void init_queue(Queue *q, int capacity) {
q->data = (int*)malloc(capacity * sizeof(int));
q->front = -1;
q->rear = -1;
q->capacity = capacity;
}
// 入队操作
void enqueue(Queue *q, int value) {
if ((q->rear + 1) % q->capacity == q->front) {
printf("Queue is full.\n");
return;
}
q->rear = (q->rear + 1) % q->capacity;
q->data[q->rear] = value;
}
// 出队操作
int dequeue(Queue *q) {
if (q->front == q->rear) {
printf("Queue is empty.\n");
return -1; // 返回错误码
}
int value = q->data[q->front];
q->front = (q->front + 1) % q->capacity;
return value;
}
// 打印杨辉三角形
void print_pascals_triangle(int n) {
Queue queue;
init_queue(&queue, n);
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= i; ++j) {
if (j == 0 || j == i)
enqueue(&queue, 1); // 杨辉三角第一行和最后一行全为1
else
enqueue(&queue, dequeue(&queue) + dequeue(&queue)); // 取上一行的两个相邻项相加
printf("%d ", queue.data[queue.rear]);
}
printf("\n"); // 换行
dequeue(&queue); // 清空这一行
}
}
int main() {
int rows = 5; // 输出前5行
print_pascals_triangle(rows);
return 0;
}
```
这个程序会输出前5行的杨辉三角形。运行程序,可以看到按照等腰三角形的形式显示的数字。
阅读全文