数据结构学习之链队列c++实现杨辉三角

#ifndef LINKQUEUE_H
#define LINKQUEUE_H
#include <iostream>
#include <assert.h>
using namespace std;
template <class T> class LinkQueueNode{
public:
	T data;
	LinkQueueNode<T>* link;
	LinkQueueNode(T& value):data(value),link(NULL){}
};

template <class T> class LinkQueue{	
	LinkQueueNode<T>* front;
	LinkQueueNode<T>* back;
	
public:
	LinkQueue():front(NULL),back(NULL){}
	void EnQueue(T element);
	T DelQueue();
	T& GetFront();
	void MakeEmpty();
	bool IsEmpty();
};
template <class T> void LinkQueue<T>::EnQueue(T value)
{
	LinkQueueNode<T>* add = new LinkQueueNode<T>(value);
	if(back == NULL)
	{
		front = back = add;
	}
	else
	{
		back->link = add;
		back = back->link;
	}
}
template <class T> T LinkQueue<T>::DelQueue()
{
	assert(!IsEmpty());
	LinkQueueNode<T>* old = front;
	T data = old->data;
	front = front->link;
	if(back == old)
		back = NULL;
	delete old;
	return
		data;
}
template <class T> T& LinkQueue<T>::GetFront()
{
	assert(!IsEmpty());
	return front->data;
}
template <class T> void LinkQueue<T>::MakeEmpty()
{
	while(!this->IsEmpty()){
		this->DelQueue();
	}
}

template <class T> bool  LinkQueue<T>::IsEmpty()
{
	return front == NULL;
}
#endif

template<class T> void evaluate(LinkQueue<T>& ori,LinkQueue<T>& target){
	ori.MakeEmpty();
	while(!target.IsEmpty()){
		ori.EnQueue(target.DelQueue());
	}
}

int main(){
	cout<<"请输入杨辉三角阶数i(i>2):";
	int num;
	cin>>num;
	LinkQueue<int> ori;
	ori.EnQueue(1);
	ori.EnQueue(1);
	LinkQueue<int> next;
	for(int i=0;i<num-2;i++){
		next.EnQueue(1);
		while(!ori.IsEmpty()){
			int i=ori.DelQueue();
			if(!ori.IsEmpty())
				next.EnQueue(i+ori.GetFront());
			if(ori.IsEmpty())
				next.EnQueue(i);
		}
		evaluate(ori,next);
	}
	cout<<"杨辉三角第"<<num<<"行内容如下:"<<endl;
	while(!ori.IsEmpty()){
		cout<<ori.DelQueue()<<" ";
	}
	cout<<endl;
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值