杨辉三角解析(队列实现)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=1;i<=N;++i)
{
for(j=0;j<30-3*i;++j)//打印每行前面的空格
printf(" ");
do
{
DeQueue();
GetHead();
if(e!=0) printf("%6d",e);
EnQueue();
}while(e!=0);
UpQueue();
puts("");//每行后回车换行
}
以n=4举例
结果为:
1 1
1 2 1
1 3 3 1
1 4 6 4 1
解析:
queue_size=n+2;//队列的最大容量queue_size=6(数组空间大小)
for(i=0;i queue[i]=1,queue[i+1]=1,queue[i+2]=0; front=i-1,rear=n+1; 初始化后的队列(queue数组): front 0 0 1 1 0 rear 打印第一行(即for()循环中i=1) DeQueue(); 删除队首元素,并将0赋值s 实际只将front向下移一位,front=2,即指向queue[2] GetHead(); 取队首元素,e= queue[front]= queue[2]=1 if(e!=0) printf("%6d",e); e!=0 打印e 即1 继续执行do……while语句因为e不为0 DeQueue(); 删除队首元素,并将queue[2]赋值s front=3 GetHead(); 取队首元素,e= queue[front]=queue[3]=1 if(e!=0) printf("%6d",e); e!=0 打印e 即1 EnQueue(); 在队尾添加元素s+e 此时queue[rear]=queue[0]=2 rear=1 继续执行do……while语句因为e不为0 DeQueue(); 删除队首元素,并将queue[3]赋值s front=4 GetHead(); 取队首元素,e= queue[front]=queue[4]=0 if(e!=0) printf("%6d",e); e==0 不执行printf()语句 EnQueue(); 在队尾添加元素s+e 此时queue[rear]=queue[1]=1 rear=2 此时e==0跳出do……while语句 即打印第一行完毕输出: 1 1 UpQueue(); 在队尾添加元素0 即queue[rear]=queue[2]=0 rear=3 队列为: 2 1 0 1 0 1 puts("");//每行后回车换行rear front 打印第二行 DeQueue(); s=0 front=5 GetHead(); e=1 if(e!=0) printf("%6d",e); e!=0 打印e 即1 EnQueue(); 在队尾添加元素s+e 此时queue[rear]=queue[3]=1 rear=4 继续…… DeQueue(); s=1 front=6 对queue_size取模即指向queue[0] front=0 GetHead(); e=2 if(e!=0) printf("%6d",e); e!=0 打印e 即2 EnQueue(); 在队尾添加元素s+e 此时queue[rear]=queue[4]=3 rear=5 继续…… DeQueue(); s=2 front=1 GetHead(); e=1 if(e!=0) printf("%6d",e); e!=0 打印e 即1 EnQueue(); 在队尾添加元素s+e 此时queue[rear]=queue[5]=3 rear=6对queue_size取模即指向queue[0] rear=0 继续…… DeQueue(); s=1 front=2 GetHead(); e=0 if(e!=0) printf("%6d",e); e==0 不打印 EnQueue(); 在队尾添加元素s+e 此时queue[rear]=queue[0]=1 rear=1 此时e==0跳出do……while语句 即打印第二行完毕输出: 1 2 1 UpQueue(); 在队尾添加元素0 即queue[rear]=queue[1]=0 rear=2 队列为: …… 剩下依此类推……