数据结构——c语言 队列杨辉三角

戳这里还有其他数据结构的题目噢

https://blog.csdn.net/qq_45724947/article/details/115625130?spm=1001.2014.3001.5501


 设计并验证以下算法:利用队列的基本操作输出图3.1所示的杨辉三角,并分析两种递归算法与采用队列算法的时间复杂度。

 直接上代码:

#include <stdio.h>

#define MAXSIZE 50

typedef int Queue;
typedef struct
{
    Queue element[MAXSIZE];
    int front;
    int rear;
}SeqQueue;

void InitQueue(SeqQueue *Q)
{
    Q->front = Q->rear = 0;
}

void EnterQueue(SeqQueue *Q, Queue x)
{
    if (Q->rear + 1 == Q->front)
    {
        printf("队列已满不能入队\n");
        return;
    }
    Q->element[Q->rear] = x;
    Q->rear = Q->rear + 1;
}

void printQ(SeqQueue Q)
{
    int i;
    i = Q.front;
    while (i != Q.rear)
    {
        if (i == MAXSIZE)
        {
            i = 0;
        }
        printf(" %d ", Q.element[i]);
        i++;
    }
    printf("\n");
}

void DeleteQueue(SeqQueue *Q, Queue *x)
{
    if (Q->front == Q->rear)
    {
        printf("队列为空不能出队\n");
        return;
    }
    *x = Q->element[Q->front];
    Q->front = Q->front + 1;
}

void GetHead(SeqQueue *Q, Queue *x)
{
    if (Q->front == Q->rear)
    {
        printf("队列为空不能取值\n");
        return;
    }
    *x = Q->element[Q->front];
}
 
int main()
{
    SeqQueue Q;
    Queue x, temp;
    int n,N;
    int i;
    InitQueue(&Q);
    EnterQueue(&Q, 1);//第一行元素入队
    printf("请输入杨辉三角行数:(大于等于2)\n");
    scanf("%d",&N);
    if(N < 2)
    {	
		printf("输入格式错误!"); 
		return 0;
		}	
    for (n = 2; n <= N; n++)//产生第n行元素并入队,同时打印第n-1行的元素
    {
        EnterQueue(&Q,1);//第n行的第一个元素入队
        for (i = 1; i <= n - 2; i++)//利用队中第n-1行元素产生第n行的中间n-2个元素并入队
        {
            DeleteQueue(&Q, &temp);
            printf(" %d ", temp); //打印出来第n-1行的元素
            GetHead(&Q, &x);
            temp = temp + x; // 利用队列中第n-1行元素产生第n行元素
            EnterQueue(&Q, temp);
        } 
        DeleteQueue(&Q, &x);
        printf(" %d ", x); //打印第n-1行的最后一个元素
        EnterQueue(&Q,1); //让第n行的最后一个元素入队
        printf("\n");
    }
    while (Q.front != Q.rear)//打印最后一行元素
    {
        DeleteQueue(&Q, &x);
        printf(" %d ", x);
    }
	return 0;
}

(请不要直接复制使用。代码仅供参考,希望读者借此代码自身可以理解学习)

如果代码对您有帮助,不要忘记评论收藏噢~

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

起当风萧

如果喜欢请支持一下~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值