循环单链表定义
其实这里定义的结构跟单链表的没什么区别,只不过在初始化或操作数据的时候,要把next指针指向链表的头指针。
#define bool int
#define true 1
#define false 0
typedef struct LNode
{
struct LNode *next;
int data;
}LNode,*ScLinkList;
初始化
void InitList(ScLinkList L)
{
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL) //有可能内存分配失败
return;
L->next=L;
}
判断节点p是否是尾节点
bool IsTail(ScLinkList L,LNode *p)
{
if(p->next==L)
return true;
else
return false;
}
判断链表是否为空
bool IsEmpty(DcLinkList L)
{
if(L->next==L)
return true;
else
return false;
}
在节点p后插入节点s
void InsertNextNode(LNode *p,LNode *s)
{
if(p==NULL||s==NULL) return ;
s->next=p->next;
p->next=s;
}
循环双链表定义
#define bool int
#define true 1
#define false 0
typedef struct LNode
{
struct LNode *next,*prior;
int data;
}LNode,*DcLinkList;
初始化
void InitList(DcLinkList L)
{
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL) //有可能内存分配失败
return;
L->next=L;
L->prior=L;
}
判断节点p是否尾结点
bool IsTail(DcLinkList L,LNode *p)
{
if(p->next==L)
return true;
else
return false;
}
判断链表是否为空
bool IsEmpty(DcLinkList L,)
{
if(L->next==L)
return true;
else
return false;
}
在节点p后加入节点s
void InsertNextNode(LNode *p,LNode *s)
{
if(p==NULL||s==NULL) return ;
s->next=p->next;
s->prior=p;
p->next->prior=s;
p->next=s;
}
删除节点p的后节点
void DelteNextNode(LNode *p)
{
if(p==NULL) return ;
LNode *q=p->next;
p->next=q->next;
q->next->prior=p;
free(q);
}
博客主要介绍了循环单链表和循环双链表的定义及相关操作。循环单链表结构与单链表类似,初始化或操作时next指针指向头指针。涉及操作包括初始化、判断尾节点、判断链表是否为空、插入节点等,循环双链表还包含删除节点操作。
202

被折叠的 条评论
为什么被折叠?



