利用队列打印杨辉三角形,其特点是每一行的第一个元素和最后一个元素均为1,其他位置上的数字是其上一行与之相邻的俩个整数之和。用c语言描述且多注释
时间: 2024-12-12 10:26:47 浏览: 7
在C语言中,我们可以利用队列数据结构来打印杨辉三角形。由于队列的特点是先进先出(FIFO),我们实际上不需要用队列来存储每个数字,而是用数组模拟栈的行为,因为杨辉三角的生成需要回溯操作,类似于从上到下、从左到右的过程。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h> // 包含队列相关的库
#define MAX_SIZE 100 // 定义队列的最大大小
typedef struct {
int data[MAX_SIZE];
int front; // 队首元素索引
int rear; // 队尾元素索引
} Queue;
// 初始化队列
void initQueue(Queue *queue) {
queue->front = -1;
queue->rear = -1;
}
// 向队列添加元素
void enqueue(Queue *queue, int num) {
if (queue->rear == MAX_SIZE - 1) {
printf("Queue is full.\n");
return;
}
queue->data[++queue->rear] = num;
if (queue->front == -1) {
queue->front = 0;
}
}
// 从队列删除并返回元素
int dequeue(Queue *queue) {
if (queue->front == queue->rear) {
printf("Queue is empty.\n");
return -1;
}
return queue->data[queue->front++];
}
// 打印杨辉三角
void printPascalTriangle(int n) {
Queue queue;
initQueue(&queue);
for (int i = 0; i <= n; i++) { // 行数
for (int j = 0; j <= i; j++) { // 当前行的元素
if (j == 0 || j == i) { // 第一列和最后一列的元素都是1
enqueue(&queue, 1);
continue;
} else {
enqueue(&queue, dequeue(&queue) + dequeue(&queue)); // 其他元素等于上一行相邻元素之和
}
printf("%d ", queue.data[queue.front]);
}
printf("\n"); // 每行结束换行
while (!queue.empty()) { // 清空当前行元素
dequeue(&queue);
}
}
}
int main() {
int n = 5; // 要打印的杨辉三角行数
printPascalTriangle(n);
return 0;
}
```
在这个代码里,我们创建了一个队列结构体来模拟堆栈的操作,并用`enqueue`和`dequeue`函数来插入和取出元素。然后,在`printPascalTriangle`函数中,根据杨辉三角的规则逐行生成并打印。
阅读全文