C++显示杨辉三角

利用循环队列的数据结构:

//"CirQueue.h"
#include<iostream>

using namespace std;

template<class T>
class CirQueue
{
	private:
		T *base;
		int front;
		int rear;
		int queuesize;
	public:
		CirQueue(int m);
		~CirQueue();
		void EnQueue(T x);
		T DeQueue();
		T GetHead();
		T GetLast();
		bool QueueEmpty();
		bool QueueFull();
		void ClearQueue();
		void Pointer();
		void QueueTranverse();
};

template<class T>
CirQueue<T>::CirQueue(int m)
{
	base=new T[m];
	if(base==NULL)
	{
		cout<<"队创建失败,退出!"<<endl;
		exit(1);
	}
	front=rear=0;
	queuesize=m;
}

template<class T>
CirQueue<T>::~CirQueue()
{
	delete[] base;
	rear=0;
	front=0;
	queuesize=0;
}

template<class T>
void CirQueue<T>::EnQueue(T x)
{
	if((rear+1)%queuesize==front)
		throw "上溢,无法入队";
	base[rear]=x;
	rear=(rear+1)%queuesize;
}

template<class T>
T CirQueue<T>::DeQueue()
{
	T x;
	if(front==rear)
		throw "下溢,不能出队";
	x=base[front];
	front=(front+1)%queuesize;
	return x;
}

template<class T>
T CirQueue<T>::GetHead()
{
	T x;
	if(front==rear)
		throw "队空,队顶无元素";
	x=base[front];
	return x;
}

template<class T>
T CirQueue<T>::GetLast()
{
	T x;
	if(front==rear)
		throw "队空,队尾无元素";
	x=base[rear-1];
	return x;
}

template<class T>
bool CirQueue<T>::QueueEmpty()
{
	if(front==rear)
		return true;
	else
		return false;
}

template<class T>
bool CirQueue<T>::QueueFull()
{
	if((rear+1)%queuesize==front)
		return true;
	else
		return false;
}

template<class T>
void CirQueue<T>::ClearQueue()
{
	front=rear=0;
}

template<class T>
void CirQueue<T>::Pointer()
{
	cout<<"队头front="<<front<<endl;
	cout<<"队尾rear="<<rear<<endl;
}

template<class T>
void CirQueue<T>::QueueTranverse()
{
	int i=front;
	while(i!=rear)
	{
		if (base[i] != 0)
			cout<<base[i]<<' ';
		i=(i+1)%queuesize;
	}
	cout<<endl;
}

初始化队列,0、1入队。入队一个0,遍历队列输出,对队头两个元素求和,出队一个元素然后将和入队;循环执行上述操作rmax次。

#include<iostream>
#include"CirQueue.h"

using namespace std;

int main()
{
	int rmax;
	cout << "输入rmax:" << endl;
	cin >> rmax;
	CirQueue<int> yh(rmax + 3);//虽然只存储了rmax+2个元素,但由于使用的是循环队列,在存储时要少用一个空间用于判断队满队空,如果只申请rmax+2个内存会上溢报错
	yh.EnQueue(0);
	yh.EnQueue(1);
	for (int i = 0; i < rmax; i++)
	{
		yh.EnQueue(0);
		for (int blank = 0; blank < rmax - i - 1; blank++)//输出格式控制:每行开头加空格
			cout << ' ';
		yh.QueueTranverse();
		for (int j = 0; j < i + 2; j++)
		{
			int first = yh.DeQueue();
			int second = yh.GetHead();
			yh.EnQueue(first + second);
		}
	}

	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值