#include<iostream>
using namespace std;
template<class T> //采用模板类型
struct CircLinkNode{ //单链表节点类的定义
T data; //节点的数据域
CircLinkNode<T> *next; //节点的指针域
CircLinkNode(CircLinkNode<T> *link=NULL):next(link){} //节点的构造函数
CircLinkNode(T d,CircLinkNode<T> *link=NULL):next(link),data(d){}
};
using namespace std;
template<class T> //采用模板类型
struct CircLinkNode{ //单链表节点类的定义
T data; //节点的数据域
CircLinkNode<T> *next; //节点的指针域
CircLinkNode(CircLinkNode<T> *link=NULL):next(link){} //节点的构造函数
CircLinkNode(T d,CircLinkNode<T> *link=NULL):next(link),data(d){}
};
template<class T> //循环单链表的类定义,含有附加头节点
class CircLink{
public:
CircLink(const T& x); //默认构造函数
CircLink(const CircLink<T>& L); //复制构造函数
~CircLink(); //析构函数
int Length() const; //计算循环链表的长度
bool IsEmpty(); //判断表是否为空
CircLinkNode<T> *getHead() const; //返回附加头结点的地址
CircLinkNode<T> *Search(T x); //搜索含有数据x的元素
CircLinkNode<T> *Locate(int i); //定位第i个元素
T getData(int i); //取出第i个元素的值
class CircLink{
public:
CircLink(const T& x); //默认构造函数
CircLink(const CircLink<T>& L); //复制构造函数
~CircLink(); //析构函数
int Length() const; //计算循环链表的长度
bool IsEmpty(); //判断表是否为空
CircLinkNode<T> *getHead() const; //返回附加头结点的地址
CircLinkNode<T> *Search(T x); //搜索含有数据x的元素
CircLinkNode<T> *Locate(int i); //定位第i个元素
T getData(int i); //取出第i个元素的值