#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;
}
数据结构学习之链队列c++实现杨辉三角
最新推荐文章于 2022-09-01 09:33:02 发布