您的位置:首页 > 理论基础 > 数据结构算法

队列实现杨辉三角打印

2013-03-29 10:03 344 查看
利用循环顺序队列打印杨辉三角。杨辉三角的特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的两个整数之和。所以在打印过程中,第i行上的元素要由第i-1行中的元素来生成。在循环队列中依次存放第i-1行上的元素,然后逐个出队并打印,同时生成第i行元素并入队列。

代码如下:(已通过VC++调试通过)

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int front,rear;
}SeqQueue,*PSeqQueue;
PSeqQueue Init_SeqQueue()
{//创建一个队列
PSeqQueue Q;
Q=(PSeqQueue)malloc(sizeof(SeqQueue));
if(Q)
{
Q->front=0;
Q->rear=0;
}
return Q;
}
int Empty_SeqQueue(PSeqQueue Q)
{//
if(Q&&Q->front==Q->rear)
return 1;
else
return 0;
}
int In_SeqQueue(PSeqQueue Q,int x)
{//进队操作
if((Q->rear+1)%MAXSIZE==Q->front)
{
printf("队满!");
return 0;
}
else
{
Q->rear=(Q->rear+1)%MAXSIZE;
Q->data[Q->rear]=x;
return 1;
}
}
int Out_SeqQueue(PSeqQueue Q,int *x)
{//出队操作
if(Empty_SeqQueue(Q))
{
printf("队空!");
return 0;
}
else
{
Q->front=(Q->front+1)%MAXSIZE;
*x=Q->data[Q->front];
return 0;
}
}
int Front_SeqQueue(PSeqQueue Q,int *x)
{//取队头元素
if(Q->front==Q->rear)
{
printf("队空!");
return -1;
}
else
{
*x=Q->data[Q->front+1]%MAXSIZE;
return 1;
}
}
void Destroy_SeqQueue(PSeqQueue *Q)
{//销毁队列
if(*Q)
free(*Q);
*Q=NULL;
}
#include<stdio.h>
#include"head.h"
#include<stdlib.h>
void yanghui_trangle(int n)
{
PSeqQueue Q;
Q=(PSeqQueue)malloc(sizeof(SeqQueue));
if(Q)
{
Q->front=0;
Q->rear=0;
}
In_SeqQueue(Q,1);
In_SeqQueue(Q,1);//
int i;
for(i=1;i<=n;i++)
{
printf("\n");
for(int k=0;k<=40-4*i;k+=2)
printf(" ");//控制输出格式
In_SeqQueue(Q,0);
int t;
int s=0;
for(int j=1;j<=i+2;j++)
{
Out_SeqQueue(Q,&t);
In_SeqQueue(Q,s+t);//将前两项的和放入队尾
s=t;
if(j!=i+2)
printf("%4d",s);//遇到0的时候不输出,进行下一行
}
}
printf("\n");
Destroy_SeqQueue(&Q);
}
int main()
{
printf("请输入要打印杨辉三角几行:");
int n;
scanf("%d",&n);
yanghui_trangle(n);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构