循環連結清單即是一種首尾相接的連結清單
(1)帶頭結點的單循環連結清單示意圖:
注:判斷空連結清單的條件是:head = head->next
(2)僅設定尾指指針的但循環連結清單
注:判斷空連結清單的條件是:rear = rear->next
倆個單連結清單合并成一個循環連結清單:
在連結清單上實作将兩個線性表(a1,a2,…,an)和(b1,b2,…,bm)連接配接成一個線性表(a1,…,an,b1,…bm)
分析:若在單連結清單或頭指針表示的單循環表上做這種連結操作,都需要周遊第一個連結清單,找到結點an,然後将結點b1鍊到an的後面,其執行時間是o(n)。若在尾指針表示的單循環連結清單上實作,則隻需修改指針,無須周遊,其執行時間是o(1)。
linklist connect(linklist a,linklist b)
{
//a b均為非空循環連結清單的尾指針
linklist p = a->next;//儲存a表的頭節點位置
a->next = b->next->next;//b表的開始節點連接配接到a表尾
free(b->next);
b->next = p; //完成循環連接配接
return b;
}
注意:
①循環連結清單中沒有null指針。涉及周遊操作時,其終止條件就不再是像非循環連結清單那樣判别p或p->next是否為空,而是判别它們是否等于某一指定指針,如頭指針或尾指針等。
②在單連結清單中,從一已知結點出發,隻能通路到該結點及其後續結點,無法找到該結點之前的其它結點。而在單循環連結清單中,從任一結點出發都可通路到表中所有結點,這一優點使某些運算在單循環連結清單上易于實作。
轉載:http://blog.csdn.net/xsf50717/article/details/39932479