回覆列表
-
1 # 佛祖啊擼個人
-
2 # dadazhu1
1、防止單鏈表是空的而設的。當連結串列為空的時候,帶頭結點的頭指標就指向頭結點,如果當連結串列為空的時候,頭結點的指標域的數值為NULL。
3、單鏈表加上頭結點之後,無論單鏈表是否為空,頭指標始終指向頭結點,因此空表和非空表的處理統一,方便了單鏈表的操作,也減少了程式的複雜性和出現bug的機會。
4、對單鏈表的多數操作應明確對哪個結點以及該結點的前驅。不帶頭結點的連結串列對首元結點、中間結點分別處理等;而帶頭結點的連結串列因為有頭結點,首元結點、中間結點的操作相同,從而減少分支,使演算法變得簡單,流程清晰。
對單鏈表進行插入、刪除操作時,如果在首元結點之前插入或刪除的是首元結點,不帶頭結點的單鏈表需改變頭指標的值,在TurboC演算法的函式形參表中頭指標一般使用指標的指標(在C++中使用引用&);而帶頭結點的單鏈表不需改變頭指標的值,函式引數表中頭結點使用指標變數即可,對初學者更易接受。
擴充套件資料
連結串列中的資料是以結點來表示的,每個結點的構成:元素(資料元素的映象) +指標(指示後繼元素儲存位置),元素就是儲存資料的儲存單元,指標就是連線每個結點的地址資料。
連結串列的具體儲存表示為:
1、用一組任意的儲存單元來存放線性表的結點(這組儲存單元既可以是連續的,也可以是不連續的)。
2、連結串列中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關係,在儲存每個結點值的同時,還必須儲存指示其後繼結點的地址(或位置)資訊(稱為指標(pointer)或鏈(link))。
鏈式儲存是最常用的儲存方式之一,它不僅可用來表示線性表,而且可用來表示各種非線性的資料結構。
3、單鏈表加上頭結點之後,無論單鏈表是否為空,頭指標始終指向頭結點,因此空表和非空表的處理統一,方便了單鏈表的操作,也減少了程式的複雜性和出現bug的機會。
4、對單鏈表的多數操作應明確對哪個結點以及該結點的前驅。不帶頭結點的連結串列對首元結點、中間結點分別處理等;而帶頭結點的連結串列因為有頭結點,首元結點、中間結點的操作相同,從而減少分支,使演算法變得簡單,流程清晰。對單鏈表進行插入、刪除操作時,如果在首元結點之前插入或刪除的是首元結點,不帶頭結點的單鏈表需改變頭指標的值,在TurboC演算法的函式形參表中頭指標一般使用指標的指標(在C++中使用引用&);而帶頭結點的單鏈表不需改變頭指標的值,函式引數表中頭結點使用指標變數即可,對初學者更易接受。擴充套件資料連結串列中的資料是以結點來表示的,每個結點的構成:元素(資料元素的映象) +指標(指示後繼元素儲存位置),元素就是儲存資料的儲存單元,指標就是連線每個結點的地址資料。連結串列的具體儲存表示為:
1、用一組任意的儲存單元來存放線性表的結點(這組儲存單元既可以是連續的,也可以是不連續的)。
2、連結串列中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關係,在儲存每個結點值的同時,還必須儲存指示其後繼結點的地址(或位置)資訊(稱為指標(pointer)或鏈(link))。鏈式儲存是最常用的儲存方式之一,它不僅可用來表示線性表,而且可用來表示各種非線性的資料結構。