一、迴圈鍊錶
1、尾指標的後繼就是頭節點,每乙個指標都含有前驅指標和後繼指標。
2、查詢終端節點和尾節點的時間複雜度是o(1)。
3、易錯點
1、帶頭節點的雙鏈表l為空表是應滿足:l->next=null;
2、帶有頭節點的迴圈單鏈表l,成為空表時有表頭節點的指標域next和l的值相等
3、長度為n的迴圈單鏈表l,刪除尾節點的時間複雜度是o(n)
4、相關演算法
/*合併兩個迴圈鍊錶a和b*/
p=reara->next;
//p是表a的開始節點
reara->next=reab->next->next;
//將表b的第乙個節點(不是頭節點)賦值給a的開始節點
rearb->next=p;
//把b和a連上
q=rearb->next;
//原來b的頭節點
free
(q);
//多出來的頭節點釋放掉
二、雙向鍊錶
1、雙向鍊錶的節點有兩個指標域,乙個指向前驅元素,乙個指向後繼元素。
2、雙向鍊錶的大部分操作與單鏈表相同,例如求listlength,getelem,locateelem只需要涉及乙個指標就可以了。
3、相關演算法
typedef
struct doublenode
doublelist;
typedef
struct doublenode *node
typedef
struct
list;
/*插入元素*/
/*操作:在p節點之後插入新節點s*/
intinsertnode
(doublelist *l,node p,node s)
線性表的鏈式儲存之迴圈鍊錶
迴圈鍊錶不同於單鏈表的是在迴圈鍊錶中最後乙個結點的指標不為null,而是指向頭結點,從而整個鍊錶形成乙個環。在迴圈單鏈表中,表尾結點 r的next域指向l,故表中沒有指標域為null的結點,因此,迴圈單鏈表的判空條件不是頭結點的指標是否為空,而是它是否等於頭結點。迴圈單鏈表的插入,刪除演算法與單鏈表...
線性表 鏈式儲存結構之 迴圈鍊錶
迴圈鍊錶 circular linked list 是一種首尾相接的單鏈表。1 單迴圈鍊錶 在單鏈表中,將終端結點的指標域null改為指向表頭結點或開始結點即可。2 多重鏈的迴圈鍊錶 將表中結點鏈在多個環上。單迴圈煉表示意圖 注意 迴圈鍊錶的操作和線性表基本一致,只是 判斷空鍊錶的條件是head h...
線性表的鏈式儲存結構 雙鏈表
雙鏈表對於雙鏈表,採用類似於單鏈表的型別定義,其dlinklist型別的定義如下 typedef struct dnode 宣告雙鏈表節點型別 1.建立雙鏈表 建立雙鏈表也有兩種方法。和頭插法建立單鏈表的過程相似,採用頭插法建立雙鏈表的演算法。void createlistf dlinklist l...