用队列输出杨辉三角 基本思路:使用两个队列,第一个队列用于存当前行的系数,将计算后的下一行系数放入第二个队列,然后再复制到第一个队列中,最后输出第一个队列(循环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); }转载于:https://www.cnblogs.com/susususu/p/10817113.html
相关资源:数据结构练习题-栈和队列.docx