队列-杨辉三角

本文介绍了如何使用C语言中的队列数据结构实现杨辉三角的递归打印,通过创建循环队列并在每层计算过程中动态调整,以求解给定整数n对应的层次的杨辉三角。
摘要由CSDN通过智能技术生成

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);

}

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值