题目:
利用队列打印杨辉三角形
特点:
杨辉三角除第一行为两个1以外,从第二行开始,每一行的首尾都为1,中间位置的数为上一行中与之相邻的两个数之和,可以使用我们学过的队列问题来解决:文章来源:https://www.toymoban.com/news/detail-740669.html
代码:
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef int ElemType;
typedef struct{
ElemType data[MaxSize]; //队列的存储空间
int front,rear; //队列的队头指针和队尾指针
}Queue;
//初始化队列
void Init_Queue(Queue *Q){
Q->front=Q->rear=0;
}
//判断队列是否为空
int Empty_Queue(Queue *Q){
return Q->rear==Q->front;
}
//进栈
void In_Queue(Queue *Q,int e){
if(Q->rear==MaxSize){
return;
}
Q->data[Q->rear]=e;
Q->rear+=1;
}
//出栈
void Out_Queue(Queue *Q,int *e){
if(Q->rear==Q->front){
return;
}
*e=Q->data[Q->front];
Q->front+=1;
}
//获取队头元素
void Front_Queue(Queue *Q,ElemType *x) {
if(Empty_Queue(Q)){
return;
}else{
*x=Q->data[Q->front];
}
}
//打印杨辉三角
void yhsj(int m){
Queue Q;
int i,s,e,k;
for(i=1;i<=m;i++){
printf(" ");
}
printf("%-6d\n",1);
Init_Queue(&Q);
In_Queue(&Q,1);
k=1;
while(k<m){
//每往下一行,其第一个数字都需要往左移动1个占位
for(i=1;i<=m-k;i++){
printf(" ");
}
do{
Front_Queue(&Q,&e);
if(e){
printf("%-5d",e);
}else{
printf(" \n");
}
} while(e!=0);
k++;
}
Out_Queue(&Q,&e);
while(!Empty_Queue(&Q)){
Out_Queue(&Q,&e);
printf("%-5d",e);
}
}
int main(){
int number;
printf("请输入杨辉三角打印的行数:");
scanf("%d",&number);
yhsj(number);
return 0;
}
效果图:
文章来源地址https://www.toymoban.com/news/detail-740669.html
到了这里,关于队列的应用之打印杨辉三角形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!