/*****************************队列实现打印杨辉三角******************************/
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
//#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define Maxsize 100
typedef unsigned long int UINT;
typedef strUCt
{
UINT data[Maxsize];
int front,rear;
}Sequeue;//顺序队列的类型
Sequeue *Sq,mysq;
void SetNull(Sequeue *sq);//置队空
int Empty(Sequeue *sq);//判队空
int Enqueue(Sequeue *sq,UINT x);//入队
UINT Dequeue(Sequeue *sq);//出队
void main(void)
{
UINT n;//杨辉三角的行数(阶数)
UINT i,j;//i控制行数循环,j为每行的输出个数控制变量
UINT temp1,temp2;
Sq=&mysq;
Redo:
SetNull(Sq);
cout<<" 请输入杨辉三角的阶数n:";
cin>>n;
Enqueue(Sq,1);
cout<<endl;
for(i=1;i<=n;i++)
{
temp2=0;
for(j=1;j<i;j++)//第i行有i列,此循环打印i-1列,每一行的第一个和最后一个都是1
{
temp1=Dequeue(Sq);
printf("%-5lu",temp1);
temp2+=temp1;
Enqueue(Sq,temp2);
temp2=temp1;
}
Dequeue(Sq);//最后一个元素:1出队
printf("1 ");
temp2++;//temp2+=1;1即是最后一个元素
Enqueue(Sq,temp2);
Enqueue(Sq,1);//最后一个元素1入队
//_sleep(100);
//i行有i个元素,j控制打印的个数j=1;j<i;j++,i行打印i个
//打印第i行,并将其全部入队
}
printf("Do you want to continue? Y or N? ");
int response;
response=getche();
if(response=='Y'response=='y')
goto Redo;
else
cout<<" Press any key to exit..."<<endl;
getch();
}
void SetNull(Sequeue *sq)
int Empty(Sequeue *sq)
{
if(sq->rear==sq->front)
return TRUE;
else
return FALSE;
}
int Enqueue(Sequeue *sq,UINT x)
{
if(sq->front==(sq->rear+1)%Maxsize)
{
printf("队列已满! ");
return FALSE;
}
else
{
sq->rear=(sq->rear+1)%Maxsize;
sq->data[sq->rear]=x;
return TRUE;
}
}
UINT Dequeue(Sequeue *sq)
{
if(Empty(sq))
{
printf("队列是空的! ");
return FALSE;
}
else
{
sq->front=(sq->front+1)%Maxsize;
return (sq->data[sq->front]);
}
}