.用队列打印杨辉三角(c语言)
时间: 2024-10-29 16:10:27 浏览: 15
利用队列打印杨辉三角C语言.docx
在C语言中,杨辉三角是一个经典的动态规划问题,通常使用数组来表示每一行的元素,并利用队列的数据结构来辅助操作。以下是使用C语言的一个简单示例,展示了如何通过队列来逐层打印出杨辉三角:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <queue>
#define MAX_SIZE 100
// 队列节点
typedef struct {
int value;
bool visited; // 标记当前数字是否已打印
struct Node *next;
} QueueNode;
// 创建队列节点
QueueNode* createNode(int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->value = value;
newNode->visited = false;
newNode->next = NULL;
return newNode;
}
// 入队列
void enqueue(QueueNode** front, QueueNode** rear, int value) {
if (*rear == NULL) {
*front = *rear = createNode(value);
} else {
(*rear)->next = createNode(value);
*rear = (*rear)->next;
}
}
// 出队列
int dequeue(QueueNode** front, QueueNode** rear) {
if (*front == NULL) {
return -1; // 队列为空
} else {
int val = (*front)->value;
QueueNode* temp = *front;
*front = (*front)->next;
if (*front == NULL) {
free(temp); // 如果队列只剩下一个元素,释放内存
}
return val;
}
}
// 打印杨辉三角
void printPascalTriangle(int n) {
QueueNode* front = NULL, *rear = NULL;
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= i; ++j) {
enqueue(&front, &rear, 1); // 初始化每个节点值为1
while (!front->visited && front->value > 0) { // 当前层未打印完
printf("%d ", front->value);
front->visited = true; // 标记当前数字已打印
// 弹出当前节点并计算下一个节点值
int nextVal = dequeue(&front, &rear);
if (j + 1 < i) {
enqueue(&front, &rear, nextVal + rear->value);
} else { // 到了对角线,不需要添加下一个节点
enqueue(&front, &rear, rear->value);
}
}
// 换行
printf("\n");
}
}
}
int main() {
int n = 5; // 设置三角形的大小,这里设置为5阶
printPascalTriangle(n);
return 0;
}
```
阅读全文