CircleLinkList.h
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct CNode
{
ElemType data;
struct CNode *next;
}cnode;
typedef struct CNode *CLinkList;
Status InitCLink(CLinkList *CL);/*循环链表初始化*/
Status CreatCLink(CLinkList *CL, int n);/*循环链表的整表创建*/
Status InsertCLink(CLinkList *CL, int i, ElemType e);/*循环链表的插入*/
Status DeleteCLink(CLinkList *CL, int i, ElemType *e);/*循环链表的删除*/
Status NiXuCLink(CLinkList *CL);/*循环链表的逆序*/
int LenCLink(CLinkList Cl);/*循环链表的长度*/
void PrintCLink(CLinkList Cl);/*打印循环链表*/
Status ClearCLink(CLinkList *CL);/*循环链表的整表删除*/
CircleLinkList.c
Status InitCLink(CLinkList *CL)
{
*CL = (CLinkList)malloc(sizeof(cnode));
if(!(*CL))
{
return ERROR;
}
(*CL)->next = *CL;
return OK;
}
Status CreatCLink(CLinkList *CL, int n)
{
int i;
CLinkList r, p;
InitCLink(CL);
r = *CL;
for(i=0; i<n; i++)
{
p = (CLinkList)malloc(sizeof(cnode));
if(!p)
{
return ERROR;
}
p->data = i+1;
r->next = p;
r = p;
}
r->next = *CL;
return OK;
}
Status InsertCLink(CLinkList *CL, int i, ElemType e)
{
int j = 0;
CLinkList r, p;
if(i<1 || i>LenCLink(*CL)+1)
{
return ERROR;
}
r = *CL;
for(j=1; j<i; j++)
{
r = r->next;
}
p = (CLinkList)malloc(sizeof(cnode));
if(!p)
{
return OK;
}
p->data = e;
p->next = r->next;
r->next = p;
return OK;
}
Status DeleteCLink(CLinkList *CL, int i, ElemType *e)
{
int j = 0;
CLinkList r, p;
if(i<1 || i>i>LenCLink(*CL))
{
return ERROR;
}
r = *CL;
for(j=1; j<i; j++)
{
r = r->next;
}
p = r->next;
*e = p->data;
r->next = p->next;
free(p);
return OK;
}
Status NiXuCLink(CLinkList *CL)
{
CLinkList prev = NULL, head = NULL, next = NULL, tem_head = NULL;
tem_head = (*CL)->next;
head = (*CL)->next;
while(head != *CL)
{
next = head->next;
head->next = prev;
prev = head;
head = next;
}
(*CL)->next = prev;
tem_head->next = *CL;
return OK;
}
int LenCLink(CLinkList Cl)
{
int len = 0;
CLinkList r = Cl;
while(r->next != Cl)
{
r = r->next;
len++;
}
//printf("%d\n", len);
return len;
}
void PrintCLink(CLinkList Cl)
{
CLinkList r = Cl;
while(r->next != Cl)
{
r = r->next;
printf("%d ", r->data);
}
printf("\n");
}
Status ClearCLink(CLinkList *CL)
{
CLinkList p, q;
p = (*CL)->next;
while(p != *CL)
{
q = p->next;
free(p);
p = q;
}
(*CL)->next = (*CL);
return OK;
}
871

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



