循环单链表的表现:
struct Node; //结点类型
typedef struct Node * PNode; //结点指针类型
struct Node
{ DataType info; //数据域
PNode link; //指针域
};
typedef struct Node * LinkList; //结点指针类型
LinkList clist; //clist: 尾指针
循环单链表上的操作:
1.创建空表
①声明指向链表的(头或尾)指针
②为头结点申请空间
③设置头结点的指针域
LinkList createNullcList_link(void)
{ LinkList clist; //声明链表(尾)指针
clist = (LinkList )malloc(sizeof(struct Node));
if(clist != NULL) //若空间申请成功
clist->link = clist;
else printf(“out of space!\n”);
return clist; //返回链表指针
}
2.判断循环单链表是否为空
int isNullcList_link(LinkList clist)
{
return (clist->link == clist);
}
3.在空表中插入结点
①在(带头结点的)空表中插入结点:
… //建空表的一系列操作
PNode p; //建立新结点
p = (PNode)malloc(sizeof(struct Node));
p->info = x;
p->link = clist->link; //新结点加入链表
clist->link = p; //连成环
clist =p; //设置尾指针
②在(无头结点)空表中插入结点
LinkList clist; //声明尾指针
PNode p; //建立新结点
p = (PNode)malloc(sizeof(struct Node))
p->info = x;
clist = p; //新结点加入链表
clist->link = clist; //设置循环