数据结构习题--栈与队列(1)
用队列输出杨辉三角
基本思路:使用两个队列,第一个队列用于存当前行的系数,将计算后的下一行系数放入第二个队列,然后再复制到第一个队列中,最后输出第一个队列(循环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);
}