利用循环队列打印杨辉三角形
首先需要掌握的是循坏队列的基本函数
1:初始化
2:入队
3:出队
其次需要明确打印的循坏嵌套
最后将代码整合在一起
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
//循坏队列的存储结构定义
typedef struct
{
int data[MAXSIZE];
int front;//队首下标
int rear;//队尾下标
} Queue;
//初始化操作
void InitQueue (Queue *q)
{
q->front = q->rear = 0;//将队首队尾下标都赋值为0
}
//入队
int pushQueue (Queue *q , int e)
{
if((q->rear+1)%MAXSIZE == q->front) //损失一个元素的空间,尾指针所指向的空单元的后继单元是头所在的单元
{ //队列为满的条件:(rear+1)%MAXSIZE == front
printf("队列已满不能入队!\n") ;
return 0 ;
}
else
q->data[q->rear] = e; //元素从队尾进入队列
q->rear = (q->rear+1)%MAXSIZE ; //入队:尾追头
return 1 ;
}
int popQueue(Queue *q,int &x)//这里需要将参数x值改变带回来,所以需要用引用或者指针
{
if(q->front==q->rear)
printf("队列为空!\n");
return 0;
x=q->data[q->front];//元素从队首位置出队列
q->front=(q->front+1)%MAXSIZE;
return 1;
}
void YangHuiTriangle(int N)
{
Queue q;
//q=new Queue();
int i,j,k,s1,s2,s,x;
InitQueue(&q);
for(k=1;k<=N;k++)
printf(" ");//打印第一行的空格
printf("%d",1);//打印第一行的元素
printf("\n");
pushQueue(&q,1);//将元素1入队
for(i=2;i<=N;i++)//此层循坏控制着杨辉三角形的行数
{
for(k=N-i;k>=0;k--)
printf(" ");// 打印第i行的空格
s1=0;
for(j=1;j<=i-1;j++)//控制第i行中的元素
{
popQueue(&q,s2);//将队列队首的元素出队。赋值给s2
s=s1+s2;//控制前一行的元素相加
pushQueue(&q,s);//将得到的结果s入队
printf("%d",s);//打印s
printf(" ");//设置打印后的空格
s1=s2;
}
printf("%d",1);//打印第i行的最后一个元素
pushQueue(&q,1);//将1重新入队
printf("\n");
}
}
//主函数
int main()
{
int N;
printf("请输入杨辉三角形的行数:");
scanf("%d",&N);
YangHuiTriangle(N);//调用打印杨辉三角形的函数
return 0;
}