数据结构:使用栈和队列相关知识打印杨辉三角

来源:互联网 发布:日上免税店 mac 编辑:程序博客网 时间:2024/06/15 18:36

本文利用数据结构队列知识编程实现打印杨辉三角,源代码如下:

#include <stdio.h>

 

#define MAXSIZE 50

#define N 10

 

typedef int QueueElementType;

 

typedef struct

{

    QueueElementType element[MAXSIZE];

    int front;

    int rear;

}SeqQueue;

 

void InitQueue(SeqQueue *Q)

{

    Q->front = Q->rear = 0;

}

void EnterQueue(SeqQueue *Q,QueueElementType x)

{

    if ((Q->rear + 1) %MAXSIZE == Q->front)

    {

        printf("队列已满不能入队\n");

        return;

    }

    Q->element[Q->rear] =x;

    Q->rear = (Q->rear + 1) %MAXSIZE;

}

void printQ(SeqQueueQ)

{

    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,QueueElementType *x)

{

    if (Q->front ==Q->rear)

    {

        printf("队列为空不能出队\n");

        return;

    }

    *x = Q->element[Q->front];

    Q->front = (Q->front + 1) %MAXSIZE;

}

void GetHead(SeqQueue *Q,QueueElementType *x)

{

    if (Q->front ==Q->rear)

    {

        printf("队列为空不能取值\n");

        return;

    }

    *x = Q->element[Q->front];

}

 

void main()

{

    SeqQueue Q;

    QueueElementType x, temp;

    int n;

    int i;

    InitQueue(&Q);

 

    EnterQueue(&Q, 1);//第一行元素入队

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

    }

 

}



本段代码利用数据结构打印出杨辉三角前10行,如果想要打印其他行数只需将代码最开始的宏定义  #define N 10  中的10改为其他值即可。

原创粉丝点击