用队列打印杨辉三角

   1   1   0(用0作为行打印的边界条件)tmp作为临时变量,初始化等于0

1    2   1   0 (tmp(0)+1,tmp(1)+1,tmp(1)+0)  规律

1  3   3   1   0 (tmp(0)+1,tmp(1)+2,tmp(2)+1,tmp(1)+0) tmp的顺序输入值是上一行队列里的反向出队列的值,被加数是上一行队列的顺序输出值。代码如下:

#include<iostream>
using namespace std;
#define NUM 50
template <class T>
class Seq
{
private:
	 T * elem;
	 int front;
	 int rear;
	 int maxsize;
	 int size;
public:
	void create();
	void enQue(T x);
	void deQue();
	T getHead();
	bool isEmpty();
	void traverse();
};
template <class T>
void Seq<T>::create()
{
	elem=new T[NUM];
	front=0;
	rear=0;
	maxsize=NUM;
	size=0;
}
template <class T>
void Seq<T>::enQue(T x)
{
	if((rear+1)%maxsize==front) cout<<"The queue is full !";
	else {rear=(rear+1)%maxsize; elem[rear]=x; size++; }
}
template <class T>
void Seq<T>::deQue()
{
	if(rear==front) cout<<"There is no data !";
	else {front=(front+1)%maxsize; size--; }
}
template <class T>
T Seq<T>::getHead()
{
	return elem[(front+1)%maxsize];
}
template <class T>
bool Seq<T>::isEmpty()
{
	if(rear==front) return true;
	else return false;
}
template <class T>
void Seq<T>::traverse()
{
	for(int i=0;i<size;i++)
	{
		cout<<elem[(front+1+i)%maxsize]<<"  ";
	}
}
void yanghui(int n)
{
	Seq<int> Q;
	int tmp=0;
	int k=1;
	cout<<1<<endl;;
	Q.create();	
	Q.enQue(1);
	Q.enQue(1);
	Q.enQue(0);
	while(k<n)
	{
	    while(Q.getHead()!=0)
	   {
		Q.enQue(tmp+Q.getHead());
		tmp=Q.getHead();
		cout<<Q.getHead();
		Q.deQue();
	   }
	k++;
	tmp+=Q.getHead();
	Q.enQue(tmp);
	Q.enQue(0);
	Q.deQue();
	tmp=0;
	cout<<endl;
	}
}
int main()
{
	yanghui(5);
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值