C语言 顺序队列实现杨辉三角
时间: 2024-04-14 22:21:47 浏览: 102
以下是C语言顺序队列实现杨辉三角的代码和解释:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int *elem; // 存储队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
int queuesize; // 队列最大长度
} SqQueue;
// 初始化队列
void InitQueue(SqQueue *Q, int queuesize) {
Q->elem = (int *)malloc(sizeof(int) * queuesize);
Q->front = Q->rear = 0;
Q->queuesize = queuesize;
}
// 入队
void EnQueue(SqQueue *Q, int e) {
if ((Q->rear + 1) % Q->queuesize == Q->front) {
printf("Queue is full.\n");
return;
}
Q->elem[Q->rear] = e;
Q->rear = (Q->rear + 1) % Q->queuesize;
}
// 出队
void DeQueue(SqQueue *Q, int *e) {
if (Q->front == Q->rear) {
printf("Queue is empty.\n");
return;
}
*e = Q->elem[Q->front];
Q->front = (Q->front + 1) % Q->queuesize;
}
// 计算杨辉三角
void YangHuiTriangle(int n) {
SqQueue Q;
InitQueue(&Q, n + 2); // 队列最大长度为n+2
EnQueue(&Q, 1); // 第一行的元素入队
for (int i = 1; i <= n; i++) {
int pre = 0; // 上一行的元素
for (int j = 0; j < i; j++) {
int cur;
DeQueue(&Q, &cur); // 出队一个元素
printf("%d ", cur);
EnQueue(&Q, cur + pre); // 计算当前元素并入队
pre = cur; // 更新上一行的元素
}
printf("\n");
EnQueue(&Q, 0); // 每行最后一个元素为0,入队
}
free(Q.elem); // 释放队列空间
}
int main() {
int n;
printf("Please input the number of rows: ");
scanf("%d", &n);
YangHuiTriangle(n);
return 0;
}
```
阅读全文