1.循环双链表的定义,循环双链表的初始化,判断循环双链表是否为空
/*循环双链表*/
#include<stdio.h>
typedef struct DNode
{
int data;
struct DNode * prior,* next;
}DNode,*DLinkList;
bool InitDLinkList(DLinkList &L); //初始化循环双链表
bool Empty(DLinkList L); //判断循环双链表是否为空
/*初始化循环双链表*/
bool InitDLinkList(DLinkList &L)
{
L=(DNode *)malloc(sizeof(DNode));
if(L==NULL)
{
return false;
}
L->prior=L;
L->next=L;
return true;
}
/*判断循环双链表是否为空*/
bool Empty(DLinkList L)
{
if(L->next==L)
{
return true;
}
else
{
return false;
}
}
int main(void)
{
DLinkList L;
InitDLinkList(L);
if(Empty(L))
{
printf("此循环双链表为空");
}
else
{
printf("此循环双链表不为空");
}
return 0;
}
2.判断结点p是否为循环双链表的表尾结点
/*判断结点p是否为循环双链表的表尾结点*/
bool isTail(DLinkList L,DNode *p)
{
if(p->next==L)
{
return true;
}
else
{
return false;
}
}
3.循环双链表在p结点之后插入s结点
/*在p结点之后插入s结点*/
bool InsertNextDNode(DNode *p,DNode *s)
{
s->next=p->next;
p->next->prior=s;
s->prior=p;
p->next=s;
}
4.删除p的后继结点q
p->next=q->next;
q->next->prior=p;
free(q);