C++使用链式储存结构打印杨辉三角
时间: 2024-04-29 16:23:17 浏览: 8
杨辉三角是一个数字三角形,每个数字等于它上方和左上方的两个数字之和。以下是使用链式储存结构打印杨辉三角的C代码:
```c
#include<stdio.h>
#include<stdlib.h>
typedef struct Node { // 定义链表节点结构体
int data;
struct Node* next;
} Node;
void printTriangle(int n) { // 打印杨辉三角函数
Node* pre = NULL; // 前一行的链表头指针
Node* cur = NULL; // 当前行的链表头指针
for (int i = 1; i <= n; i++) {
cur = (Node*)malloc(sizeof(Node)); // 创建当前行的链表头节点
cur->data = 1;
cur->next = NULL;
if (pre != NULL) { // 如果不是第一行
Node* preCur = pre; // 指向前一行的当前节点
Node* prePrev = NULL; // 指向前一行的前一个节点
while (preCur != NULL) { // 遍历前一行链表
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = preCur->data + (prePrev == NULL ? 0 : prePrev->data); // 计算新节点的值
newNode->next = NULL;
cur->next = newNode; // 将新节点插入当前行链表
cur = newNode;
prePrev = preCur; // 更新前一行的指针
preCur = preCur->next;
}
}
pre = cur; // 更新前一行指针
while (cur != NULL) { // 打印当前行链表
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
}
}
int main() {
int n;
printf("请输入杨辉三角的行数:");
scanf("%d", &n);
printTriangle(n);
return 0;
}
```
在链表中,每个节点存储一个数字,每行的链表头指针指向第一个节点。在打印杨辉三角的过程中,我们需要分别使用前一行和当前行的链表头指针来计算新行的数字,并将它们插入当前行的链表中。具体来说,对于第i行,我们先创建一个链表头节点,并设置它的值为1,然后遍历第i-1行的链表,计算每个新节点的值,并将它们插入当前行链表的末尾。在遍历完第i-1行的链表后,我们更新前一行指针,并打印当前行的链表。重复以上步骤直到打印完所有行。