1. 程式人生 > >資料結構:使用棧和佇列相關知識列印楊輝三角

資料結構:使用棧和佇列相關知識列印楊輝三角

本文利用資料結構佇列知識程式設計實現列印楊輝三角,原始碼如下:

#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(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, 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改為其他值即可。