數據結構習題--隊列(1)
阿新 • • 發佈:2019-05-06
png enqueue 循環 r+ \n sizeof ret turn oid
用隊列輸出楊輝三角
基本思路:使用兩個隊列,第一個隊列用於存當前行的系數,將計算後的下一行系數放入第二個隊列,然後再復制到第一個隊列中,最後輸出第一個隊列(循環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(maxsize*sizeof(CricQueue)); CricQueue *q2 = (CricQueue*)malloc(maxsize*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); }
數據結構習題--隊列(1)