#include <iostream>
using namespace std;
#define Max 100
class SeqQueue
{
public:
SeqQueue();
void EnQueue(int x);
int DeQueue();
int GetFront();
int GetRear();
bool IsEmpty();
bool IsFull();
int GetSize();
private:
int A[Max];
int rear;
int front_;
};
int main()
{
int k=1,x=0,y=0,n,i,j,a,b;
SeqQueue s;
s.EnQueue(k); //首先压入第一行元素1 1
s.EnQueue(k);
cout<<"输入打印的杨辉三角行数"<<endl;
cin>>n;
cout<<"输出前"<<n<<"行杨辉三角"<<endl;
for(i=1;i<=n;i++)
{
s.EnQueue(x); //每次在行末尾添加0,即将0压入队尾中
for(j=1;j<=i+2;j++) //第i行有i+2个数,包括添加的0,
{
a=s.DeQueue(); //删除并返回队首元素到a
b=a+y; //y第一次使用时为0,以后每次循环都是上一次出队列的元素,b为下一次将压队尾的元素=刚出队列的元素a+前一次出队列的元素
s.EnQueue(b); //压入b
y=a; //b保存已出队列的元素,用于下一次循环
if(j!=i+2) cout<<y<<" "; //第i+2个数为0,不必输出
}
cout<<endl;
}
return 0;
}
SeqQueue::SeqQueue()
{
rear=front_=0;
}
void SeqQueue::EnQueue(int x)
{
A[rear]=x;
rear=(rear+1)%Max;
}
int SeqQueue::DeQueue()
{
int x;
x=A[front_];
front_=(front_+1)%Max;
return x;
}
int SeqQueue::GetFront()
{
return A[front_];
}
int SeqQueue::GetRear()
{
return A[rear-1];
}
bool SeqQueue::IsEmpty()
{
if(front_==rear) return true;
else return false;
}
bool SeqQueue::IsFull()
{
if((rear+1)%Max==front_) return true;
else return false;
}
int SeqQueue::GetSize()
{
return (rear-front_+Max)%Max;
}