队列基础 (用队列打印杨辉三角)

本文介绍如何使用循环队列来实现杨辉三角的打印功能。通过定义结构体并实现初始化、入队、出队及获取队头元素等操作,代码能够按行打印出指定行数的杨辉三角形。

       这里,我们用的队列是循环队列。

       解决这个问题很简单,打印一行,存一行

       代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define MaxSize 10    // 代码只能打印9行

typedef struct
{
        int data[MaxSize];
        int front;
        int rear;
}SqQueue;

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

int EnQueue(SqQueue *Q , int e)
{
     if( (Q->rear+1)%MaxSize == Q->front )
     {
             printf("Full!");
             return 0;
     }
     else
     { 
         Q->rear=(Q->rear+1)%MaxSize;
         Q->data[Q->rear]=e;
         return 1;
     }
}

int OutQueue(SqQueue *Q , int *e)
{
    if( Q->front==Q->rear )
    {
        printf("Vacant!");
        return 0;
    }
    else
    {
        Q->front=(Q->front+1)%MaxSize;
        (*e)=Q->data[Q->front];
        printf("%d ",(*e));
        return 1;
    }
}

int UseQueue(SqQueue *Q , int *e)
{
    if( Q->front==Q->rear )
    {
        printf("Vacant!");
        return 0;
    }
    else
    {
        *e=Q->data[(Q->front+1)%MaxSize];
        return 1;
    }
}

void Printftrangle( int N )
{
     SqQueue Q;
     InitQueue(&Q);
     int i,j,x,y,z,n;
//     int N=1;
     EnQueue(&Q,1);
     for(n=1;n<N;n++)
     {
               EnQueue(&Q,1);
               for(i=1;i<=n-1;i++)
               {
                          OutQueue(&Q,&x);
                          UseQueue(&Q,&y);
                          z=x+y;
                          EnQueue(&Q,z);
               }
               OutQueue(&Q,&x);
               putchar(10);
               EnQueue(&Q,1);
     }
     while(Q.front!=Q.rear)
     {
                     OutQueue(&Q,&j);                
     }
}

int main()
{
    int N;
    scanf("%d",&N);
    Printftrangle(N);
    getchar();
    getchar();
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值