目录
循环链表:是一种头尾相接的链表(即:表中最后一个结点的指针域指向头结点,整个链表形成一个环)
优点:从表中任一结点出发均可找到表中其他结点
一、循环单链表
//定义
typedef int ElemType
typedef struct Lnode
{
ElemType data;//每个结点存放一个数据元素
struct Lnode* next;//每个结点存放一个数据元素
}Lnode,*LinkList;
//初始化带头结点的单链表
{
L = (Lnode*)malloc(sizeof(Lnode));
if (L == NULL)
return false;//内存不足,分配失败
else
L->next = L;//头结点next指向头结点
return true;
}
//判断循环单链表(有头结点)是否为空
bool Empty(LinkList L)
{
if (L->next == L)
return true;
else
return false;
}
//判断结点p是否为循环单链表的表尾结点
bool isTail(LinkList L, Lnode* p)
{
if (p->next == L)
return true;
else
return false;
}
二、循环双链表
//定义
typedef struct DNode
{
ElemType data;
struct DNode* prior, * next;
}DNode,*DLinkList;
//初始化空的循环双链表
bool InitDLinkList(DLinkList& L)
{
L = (DNode*)malloc(sizeof(DNode));
if (L == NULL)//开辟空间失败
return false;
else
{
L->prior = L;
L->next = L;
}
return true;
}
//判断循环双链表是否为空
bool Empty(DLinkList L)
{
if (L->next != L)
return false;
else
return true;
}
//判断结点p是否为循环双链表的表尾结点
bool isTail(DLinkList L)
{
DNode* p;
if (p->next == L)
return true;
else
return false;
}