链表的一种特殊形式,最后一个结点的指针域指向头结点,整个链表形成一个环
由于其实现与链表相差不大,此仅给出循环链表定义,具体实现推荐去作者GitHub页面查看
(下面代码只是最初实现,后续如果有修改,由于太麻烦,不会再更改下文,仅仅更新Github上的代码文件)
class CircularList { public: CircularList(); CircularList(int len); ~CircularList(); LNode *CircularListHead() { return head; } LNode *CListHead() { return head; } // 获取链表长度 int CListLength(); // 判断链表是否为空 bool CListEmpty(); // 返回链表中第pos个结点 bool GetNode(int pos, LNode **node); // 返回指定data在链表中第一次出现的位置 bool LocateNode(ElemType ele, LNode **node); // 在指定位置插入后一个结点,但若pos为0是表示在链表头插入一个结点 bool CListInsert(int pos, LNode *node); // 删除指定位置结点 bool CListDelete(int pos); // 删除指定位置结点并返回被删除结点的信息 bool CListDelete(int pos, LNode *node); // 遍历线性表 void CListTraverse(); // 在链表尾添加cnt个结点 bool CListAddNodes(int cnt); // 销毁链表,释放所有结点资源 void CListDestory(); private: LNode *head; // 循环链表头结点,不储存数据,逻辑上不属于链表的结点,当head->next == head时为空循环链表 };