数据结构线性表之实现单循环链表
数据结构线性表之实现单循环链表
相关文章
数据结构线性表之概念(一)
数据结构线性表之抽象基类(二)
数据结构线性表之实现顺序表(三)
数据结构线性表之实现单链表(四)
数据结构线性表之实现单循环链表(五)
单循环链表
循环链表也是采用链式存储,与单链表不相同的是链表尾节点指向的不是NULL而是链表的头节点,这样只要我们知道其中任何一个节点的地址就能遍历链表中其他任意节点。
上图来源于单向循环链表的简单实现
对于单链表,我们判断该节点是否为尾节点使用下列方式
current->next==NULL
而对于循环链表,我们需要使用
current->next==first //first即头节点
单循环链表定义
节点定义
template<class T>
struct CircLinkNode{
T data; //节点包含的数据元素
CircLinkNode<T>* next; //指向后继节点
CircLinkNode():data(),next(NULL){}
CircLinkNode(T value):data(value),next(NULL) {}
};
类定义
/**
* 带头节点的循环链表
* @tparam T
*/
template<class T>
class CircLinkList{
private:
CircLinkNode<T>* first;
public:
CircLinkList();
CircLinkList(CircLinkList &L);
~CircLinkList();
int Length()const;
bool IsEmpty()const;
CircLinkNode<T>* getHead()const;
CircLinkNode<T>* Search(T x);
CircLinkNode<T>* Locate(int i);
T getData(int i);
void setData(int i,T & x);
bool Insert(int i, T& x);
bool Remove(int i,T &x);
};