代碼實作
typedef struct node
{
int data;//資料域
struct node *next;
}NODE,*PNODE;
PNODE init_link_list(void)//單連結清單初始化
{
PNODE phead = malloc(sizeof(NODE));
if(phead == NULL)
{ exit(-1);}
phead->next = phead;
return phead;
}
PNODE new_node(int dat)
{
PNODE pnew =malloc(sizeof(NODE));
if(pnew == NULL)
return pnew;
pnew->data = dat;
pnew->next = NULL;
return pnew;
}
bool insert_node_tail(PNODE phead,PNODE pnew)//把位址為pnew的節點插入到單向循環連結清單的尾部(頭節點前面)
{
if(pnew == NULL || phead == NULL)
return false;
PNODE p = phead->next;
while(p->next != phead)
p = p->next;
pnew->next = phead;
p->next = pnew;
return true;
}
bool is_empty(PNODE phead)//判斷連結清單為空,沒有滿的情況
{
if(phead->next == phead)
return true;
else
return false;
}
void show_list(PNODE phead)//連結清單的周遊
{
PNODE p = NULL;
if(is_empty(phead))
{
printf("list is empty!\n");
return;
}
p = phead->next;
while(p != phead)//周遊
{
printf("%d\t",p->data);
p = p->next;
}
printf("\n");
}
bool del_node(PNODE phead,PNODE pdel)//單向循環連結清單的删除
{
PNODE p;
if(phead == pdel || phead == NULL || pdel == NULL)
return false;
//p = phead->next
p = phead;
while(p->next != phead)
{
if(p->next == pdel )
break;
p = p->next;
//ptmp= ptmp->next;
}
if(p->next != pdel)
return false;
//删除節點
p->next = pdel->next;
pdel->next = NULL;
//free(pdel);
return true;
}