1. 程式人生 > >楊輝三角(c++佇列模板實現)

楊輝三角(c++佇列模板實現)

在這裡插入圖片描述

#include
using namespace std;

template
class LinkQueue{
struct LinkQueueNode
{
T data;
LinkQueueNode link;
LinkQueueNode(T & theData, LinkQueueNode * n=NULL):data(theData),link(n){}
};
LinkQueueNode
front;
LinkQueueNode* back;

public:
LinkQueue(); //建構函式
~LinkQueue(); //解構函式
void EnQueue(T& element); //入佇列
T DelQueue(); //出佇列
T& GetFront(); //返回佇列的頭
void MakeEmpty(); //清空佇列
bool IsEmpty(); //判斷佇列是否為空
};

template
LinkQueue::LinkQueue()
{
front = back = NULL;
}

template
LinkQueue::~LinkQueue()
{
this->MakeEmpty();
}

template
void LinkQueue::EnQueue(T& value)
{
if(this->IsEmpty())
front = back = new LinkQueueNode(value);
else
back = back->link = new LinkQueueNode(value);
}

template
T LinkQueue::DelQueue()
{
LinkQueueNode* old = front;
T data = old->data;
front = front->link;
delete old;
return data;
}

template
T& LinkQueue::GetFront()
{
if(!IsEmpty())
return front->data;
}

template
void LinkQueue::MakeEmpty()
{
while(!this->IsEmpty())
{
this->DelQueue();
}
}

template
bool LinkQueue::IsEmpty()
{
return front == NULL;
}

//賦值
template
void evaluate(LinkQueue& ori,LinkQueue& target){
ori.MakeEmpty();
while(!target.IsEmpty()){
int tmp_value = target.DelQueue();
ori.EnQueue(tmp_value);
}
}

int main()
{
cout<<"————歡迎使用楊輝三角行計算器!————"<<endl;
cout<<"————author—軟體17-8 金啟亮—————"<<endl;
cout<<“請輸入楊輝三角階數i(i>2):”;
int num;
cin>>num;
LinkQueue ori; //先建立一個佇列並初始化佇列元素為1

int ini_value = 1;
ori.EnQueue(ini_value);
ori.EnQueue(ini_value);
LinkQueue<int> next;
for(int i=0;i<num-2;i++){
	next.EnQueue(ini_value);
	while(!ori.IsEmpty())
	{
		int i=ori.DelQueue();
		if(!ori.IsEmpty())
		{
			int tmp = i+ori.GetFront();
			next.EnQueue(tmp);
		}
		if(ori.IsEmpty())
			next.EnQueue(i);
	}
	evaluate(ori,next);
}
cout<<"楊輝三角第"<<num<<"行內容如下:"<<endl;
while(!ori.IsEmpty()){
	cout<<ori.DelQueue()<<" ";
} 
cout<<endl;

system("PAUSE");
return 0;

}