#include<iostream>
#include<assert.h>
#include<stdio.h>
using namespace std;
template<class T>
class SQ
{
private:
int rear,front;//对列的头和尾
T *elements;//元素域
int maxsize;
public:
SQ(int sz=10);
~SQ(){delete[]elements;}
bool EQ(T x);//进队
bool DQ(T&x);//出队
bool isfull(){return((rear+1)%maxsize==front)?true:false;}
bool isempty(){return(front==rear)?true:false;}
void YANG(int n);
};
template<class T>//构造函数
SQ<T>::SQ(int sz):front(0),rear(0),maxsize(sz)
{
elements=new T[maxsize];
assert(elements!=NULL);
}
template<class T>
bool SQ<T>::EQ(T x)
{
if(isfull()==true)return false;
elements[rear]=x;
rear=(rear+1)%maxsize;//防止假溢出
return true;
}
template<class T>
bool SQ<T>::DQ(T&x)
{
if(isempty()==true)return false;
x=elements[front];
front=(front+1)%maxsize;//防止假溢出
return true;
}
template <class T>
void SQ<T>::YANG(int n)
{
SQ q(n+2);
int i,j,s=0,t,u;
int g=n;
q.EQ(1);q.EQ(1);
for(i=1;i<=n;i++)
{
g--;
cout<<endl;
for (int k=g-1;k>=0;k--)//控制三角形形状(左侧)
{
cout.width(2);
cout<<" ";
}
q.EQ(0);
for(j=1;j<=i+2;j++)
{
q.DQ(t);
u=s+t;
q.EQ(u);
s=t;
if(j!=i+2)//控制三角形形状(右侧)
{
cout.width(4);
cout<<s;
}
}
}
}
//main.cpp
void main()
{
SQ<int> s;
int n;
cout<<"请输入杨辉三角的层数:";
cin>>n;
s.YANG(n);
cout<<endl;
}