用隊列輸出楊輝三角
基本思路:使用兩個隊列,第一個隊列用於存當前行的系數,將計算后的下一行系數放入第二個隊列,然后再復制到第一個隊列中,最后輸出第一個隊列(循環n-1次)。感謝指出錯誤,手動@杜文澤
#include<stdio.h>
#include<stdlib.h>
#define maxsize 30
typedef int datatype;
typedef struct {
datatype data[maxsize];
int front,rear;
}CricQueue;
void Initial(CricQueue *q){
int front = 0;
int rear = 0;
}
int QueueIsEmpty(CricQueue *q){
return q->front == q->rear;
}
int QueueIsFull(CricQueue *q){
return q->front == (q->rear+1)%maxsize;
}
int EnQueue(CricQueue *q,datatype x){
if(QueueIsFull(q))
return 0;
q->data[q->rear++] = x;
return 1;
}
int DeQueue(CricQueue *q){
datatype k;
if(QueueIsEmpty(q))
return 0;
k = q->data[q->front];
q->front = (q->front+1)%maxsize;
return k;
}
int Getfront(CricQueue *q){
datatype m;
if(QueueIsEmpty(q))
return 0;
m = q->data[q->front];
return m;
}
void PascalAngle(int n){
int i;
datatype j,k;
CricQueue *q1 = (CricQueue*)malloc(sizeof(CricQueue));//只用開辟一個空間就可以
CricQueue *q2 = (CricQueue*)malloc(sizeof(CricQueue));
Initial(q1),Initial(q2);
EnQueue(q1,1),EnQueue(q1,1);
printf("1 1\n");
for(i = 1;i<n;i++){
EnQueue(q2,1);
//計算第i+1行的元素,進隊列q2
while(!QueueIsEmpty(q1)){
k = DeQueue(q1);
if(!QueueIsEmpty(q1)){
j = Getfront(q1);
EnQueue(q2,k+j);
}else
EnQueue(q2,1);
}
//將第i+1行復制到q1中,並輸出該行
while(!QueueIsEmpty(q2)){
k = DeQueue(q2);
EnQueue(q1,k);
printf("%d",k);
printf(" ");
}
printf("\n");
}
}
main(){
int n;
printf("請輸入行數:");
scanf("%d",&n);
PascalAngle(n);
}