資料結構:使用棧和佇列相關知識列印楊輝三角
本文利用資料結構佇列知識程式設計實現列印楊輝三角,原始碼如下:
#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
{
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
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改為其他值即可。