1
题目内容:给出一个参数n,打印n层的杨辉三角,使用队列实现。给定函数头为:void Print_yanghui(int n)
提示:分别根据n-1层的数,计算出n层的数并将其打印。(队列的基本操作请参考附件中代码)
举例:给出 1 3 3 1
1出队 读取3 1和3相加入队 则为3 3 1 4
3出队 读取3 3和3相加入队 则为3 1 4 6
3出队 读取1 3和1相加入队 则为1 4 6 4
此时1出队,说明n-1层读取完毕,输出第n层杨辉三角
要求: 1、给定的函数头不能变更,输入n为10 2、将运行结果及主要代码进行截图上传
#include<stdio.h>
#include<malloc.h>
#define MaxSize 1000
typedef int ElementType;
typedef struct {
ElementType data[MaxSize];
int rear;
int front;
} CirQueue;
/*顺序循环队列初始化*/
CirQueue * CreateQueue() {
CirQueue *q;
q = (CirQueue *)malloc(sizeof(CirQueue *));
q->front = 0;
q->rear = 0;
return q;
}
/*顺序循环队列判空,返回1表示空,0表示非空*/
int QueueEmpty(CirQueue *q) {
if (q->front == q->rear) {
return 1;
} else {
return 0;
}
}
/*顺序循环队列判满,返回1表示满,0表示非满*/
int QueueFull(CirQueue *q) {
if ((q->rear + 1) % MaxSize == q->front) {
return 1;
} else {
return 0;
}
}
/*顺序循环队列入队*/
void EnQueue(CirQueue *q, int x) {
if (QueueFull(q)) {
printf("队满!\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MaxSize;
}
/*顺序循环队列出队*/
int DeQueue(CirQueue *q) {
int x;
if (QueueEmpty(q)) {
printf("队空!\n");
return '\0';
}
x = q->data[q->front];
q->front = (q->front + 1) % MaxSize;
return x;
}
// 打印
void List(CirQueue *q) {
int i = q->front;
while (i != q->rear) {
printf("%d ", q->data[i]);
i = (i + 1) % MaxSize;
}
printf("\n");
}
// 取队头元素
int GetFront(CirQueue *q) {
if (QueueEmpty(q)) {
return 0;
} else {
return q->data[q->front];
}
}
// 获取队列长度
int GetLen(CirQueue *q) {
return ((q->rear - q->front + MaxSize) % MaxSize);
}
// 杨辉三角
void Print_yanghui(int n) {
CirQueue *q = CreateQueue();
EnQueue(q, 1);
printf("%*s", n, "");// 输出n个空格
List(q);
int out = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < GetLen(q) - 1; j++) {
out = DeQueue(q);
EnQueue(q, out + GetFront(q));
}
EnQueue(q, 1);
printf("%*s", n - i - 1, "");
List(q);
}
}
void main() {
Print_yanghui(10);
}