单循环链表只是私有数据成员增加了一个指向尾节点的指针last,尾节点指针指向附加头节点,具体的函数实现只要注意这一点即可,与单链表差别不大,故只放出头文件。
#ifndef CirclList_h
#define CirclList_h
#include "LinearList.h"
template <class T>
struct CircLinkNode{
T data;
CircLinkNode<T>* link;
CircLinkNode(CircLinkNode<T>* next = NULL) : link(next){}
CircLinkNode(T d, CircLinkNode<T>* next = NULL) : data(d), link(next){}
};
template <class T>
class CircList : public LinearList<T>{
private:
CircLinkNode<T>* first, * last;
public:
CircList(){first = last = new CircLinkNode<T>(first);}
CircList(const T& x){first = last = new CircLinkNode<T>(x, first);}
CircList(CircList<T>& L);
~CircList();
int Length()const;
int Search(T& x)const;
CircLinkNode<T>* Locate(int i)const;
T getData(int i)const;
void setData(int i, T& x);
bool Insert(int i, T& x);
bool Remove(int i, T& x);
bool IsEmpty(){return first->link == first ? true:false;}
CircLinkNode<T>* getHead()const{return first;}
void setHead(CircLinkNode<T>* p);
void input();
void output();
CircList<T>& operator=(CircList<T>& L);
};
#endif /* CirclList_h */