楊輝三角(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;
}