队列c语言实现杨辉三角形
时间: 2023-10-11 08:09:53 浏览: 53
以下是使用队列实现杨辉三角形的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 20
// 定义队列结构体
typedef struct {
int data[MAX_SIZE];
int head;
int tail;
} Queue;
// 初始化队列
void initQue(Queue *q) {
q->head = 0;
q->tail = 0;
}
// 判断队列是否为空
int isEmptyQue(Queue *q) {
return (q->head == q->tail);
}
// 入队操作
int enQue(Queue *q, int x) {
if (q->tail == MAX_SIZE) {
printf("Queue is full\n");
return 0;
}
q->data[q->tail++] = x;
return 1;
}
// 出队操作
int deQue(Queue *q, int *x) {
if (isEmptyQue(q)) {
printf("Queue is empty\n");
return 0;
}
*x = q->data[q->head++];
return 1;
}
// 杨辉三角形
void yangHui(int n) {
Queue q;
initQue(&q);
int a[MAX_SIZE] = {1, 0}; // 初始化第一行
int b[MAX_SIZE] = {0}; // 初始化第二行
int i, j, t;
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
// 每行的最后一个数字为1
if (j == 0 || j == i) {
printf("%d ", 1);
} else {
// 计算中间数字
deQue(&q, &t);
b[j] = a[j-1] + t;
enQue(&q, b[j]);
printf("%d ", b[j]);
}
}
printf("\n");
// 将第二行复制到第一行
for (j = 0; j <= i+1; j++) {
a[j] = b[j];
}
enQue(&q, 0); // 将0入队作为每行的结束标志
}
}
int main() {
int n;
printf("请输入杨辉三角形的行数:");
scanf("%d", &n);
yangHui(n);
return 0;
}
```
这里使用了一个队列来存储每行的中间数字,以便于计算下一行。每行的结束标志为0,便于下一行的计算。