//链表队列
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 10
#define f 2
//类声明
//ADT
template<class T>
class Que{
public:
virtual ~Que(){};
virtual bool empty()const = 0;
virtual int size()const = 0;
virtual T& front() = 0;
virtual T& back() = 0;
virtual void pop() = 0;
virtual void push(const T& elem) = 0;
};
//seqQue
template <class T>
struct Node{
T val;
struct Node<T>* next;
Node(){}
Node(T &t,struct Node<T>* node):val(t),next(node){}
};
template <class T>
class Que;
template <class T>
class rQue: public Que<T>{ //指定通用模板参数T
public:
rQue();
virtual ~rQue() override;
virtual bool empty()const override;
virtual int size()const override;
virtual T& front() override;
virtual T& back() override;
virtual void pop() override;
virtual void push(const T& elem) override;
private:
Node<T>* pFr;
Node<T>* pR;
int S;
};
template<class T>
rQue<T>::rQue()
{
pFr = NULL;
pR = NULL;
S = 0;
}
template<class T>
rQue<T>::~rQue()
{
}
template<class T>
bool rQue<T>::empty()const
{
return pFr == NULL;
}
template<class T>
int rQue<T>::size()const
{
return S;
}
template<class T>
T& rQue<T>::front()
{
if(!empty())
{
return pFr->val;
}else throw "empty";
}
template<class T>
T& rQue<T>::back()
{
if(!empty())
{
return pR->val;
}else throw "empty";
}
template<class T>
void rQue<T>::pop()
{
if(!empty())
{
Node<T>* tNode = pFr->next;
delete pFr;
pFr = tNode;
S--;
}else throw "empty";
}
template<class T>
void rQue<T>::push(const T& elem)
{ Node<T>* nNode = new Node<T>(elem,nullptr);
if(rQue::emtpy())
{
pFr = nNode;
pR = nNode;
}else
{
pR->next = nNode;
pR = nNode;
}
S++;
}
链表队列模板类
最新推荐文章于 2024-08-05 17:00:56 发布