用c语言完成杨辉三角形的打印,请用循环队列实现(利用之前已实现的循环队列数据结构的代码
时间: 2023-09-02 16:15:38 浏览: 102
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义队列的最大容量
typedef struct {
int data[MAXSIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
void InitQueue(Queue *Q) {
Q->front = Q->rear = 0; // 初始化队头和队尾指针
}
int QueueEmpty(Queue *Q) {
return Q->front == Q->rear; // 队头和队尾指针相等时队列为空
}
int QueueFull(Queue *Q) {
return (Q->rear+1) % MAXSIZE == Q->front; // 队尾指针+1与队头指针相等时队列满
}
int EnQueue(Queue *Q, int x) {
if (QueueFull(Q)) return 0; // 队列满,插入失败
Q->data[Q->rear] = x; // 将元素插入队尾
Q->rear = (Q->rear+1) % MAXSIZE; // 队尾指针后移一位
return 1; // 插入成功
}
int DeQueue(Queue *Q, int *x) {
if (QueueEmpty(Q)) return 0; // 队列为空,删除失败
*x = Q->data[Q->front]; // 将队头元素赋值给x
Q->front = (Q->front+1) % MAXSIZE; // 队头指针后移一位
return 1; // 删除成功
}
int main() {
int n;
printf("请输入杨辉三角形的行数:");
scanf("%d", &n);
Queue Q;
InitQueue(&Q);
EnQueue(&Q, 1); // 第1行只有1个元素
for (int i = 1; i <= n; i++) {
int pre = 0; // 保存上一行的元素
for (int j = 1; j <= i; j++) {
int cur;
DeQueue(&Q, &cur); // 取出队头元素
printf("%d ", cur);
EnQueue(&Q, cur+pre); // 将当前元素和上一行的元素相加插入队尾
pre = cur; // 更新上一行的元素
}
printf("\n");
EnQueue(&Q, 1); // 每行最后一个元素为1
}
return 0;
}
```
阅读全文