双循环链表的基本操作
程序员文章站
2024-03-21 19:42:34
...
双循环链表的基本操作
【算法2.18、2.19】
Status InitList_DuL(DuLinkList *L)
{
*L = (DuLinkList)malloc(sizeof(DuLNode));
if(!(*L))
exit(OVERFLOW);
(*L)->next = (*L)->prior = *L;
return OK;
}
Status ClearList_DuL(DuLinkList L)
{
DuLinkList p, q;
p = L->next;
while(p!=L)
{
q = p->next;
free(p);
p = q;
}
L->next = L->prior = L;
return OK;
}
void DestroyList_DuL(DuLinkList *L)
{
ClearList_DuL(*L);
free(*L);
*L = NULL;
}
Status ListEmpty_DuL(DuLinkList L)
{
if(L && L->next==L && L->prior==L)
return TRUE;
else
return FALSE;
}
int ListLength_DuL(DuLinkList L)
{
DuLinkList p;
int count;
if(L)
{
count = 0;
p = L; //p指向头结点
while(p->next!=L) //p没到表头
{
count++;
p = p->next;
}
}
return count;
}