線性表的鏈式儲存結構 迴圈鍊錶 雙向鍊錶

2021-10-23 16:50:59 字數 1054 閱讀 8837

一、迴圈鍊錶

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...