双向循环链表是一种链式存储结构,它的最后一个结点指向头结点,形成一个环。因此,从循环链表中的任何一个结点出发都能找到任何其他结点。双向循环链表的操作和双向链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同。双向循环链表的头结点的前驱指向最后一个结点,尾结点的后继指向头结点。
注意:双向循环链表中无其他结点,只有头结点时 ,头结点的前驱和后继度指向自身。
1、双向循环链表的存储结构
typedef int ElemType;
typedef struct CycNode
{
struct CycNode *prev;
ElemType data;
struct CycNode *next;
}CycNode;
typedef struct CycDouList
{
CycNode *head;
int count;
}CycDouList, *pCycDouList;
2、双向循环链表的初始化
void InitCycDouList(pCycDouList list) //初始化函数
{
assert(list != NULL);
list->head = NULL;
list->count = 0;
}
3、双向循环链表的扩充
static CycNode *BuyNode(ElemType value, CycNode *prev, CycNode* next)
{