前言,:今天看書的時候,又復習了一下鏈表的知識點,但是標題上這個知識點老是弄混淆,所以接下來做一個小小的總結,給自己加深理解。
一、三者的基本概念;
1、首元結點:就是指鏈表中存儲第一個數據元素a1的結點,如下表格所示結點ZHAO就是首元結點:
L-----> | 數據域和指針域-----> | ZHAO+指針域----> |
2、頭結點:它是在首元結點之前附設的一個節點,其指針域指向首元結點。頭結點的數據域可以不存儲任何信息,也可以存儲與數據元素類型的其他附加信息,例如,當數據元素為整數型時,頭結點的數據域中可存放該線性表的長度。如上表中的數據域和指針域(在鏈表和線性中一個結點包含兩個域:一個是數據域,另外一個是指針域,指針域它本有自己的存儲地址,同時又指向下一個節點的數據域,這就形成了一個邏輯關系)就是一個頭結點。
3、頭指針:它是指向鏈表中的第一個結點的指針。若鏈表設有頭結點,則頭指針所指結點為線性表的頭結點;若鏈表不設頭結點,則頭指針所指結點為該線性表的首元結點,例如,上面的表格中L就是一個頭指針
二、鏈表增加頭結點的作用有以下幾點:
1、增加了頭結點后,首元結點的地址保存在頭結點(就是所說的“前驅”結點)的指針域中,則對鏈表的第一個數據元素的操作與其他數據元素相同,無需進行特殊處理
2、便於空表的和非空表的統一處理;當鏈表不設頭結點時,假設L為單鏈表的頭指針,它應該指向首元結點,則當單鏈表為長度n為0的空表時,L指針為空(判斷空表的條件可記為:L==NULL)
3、增加頭結點后,無論鏈表是否為空,頭指針都是指向頭結點的非空指針,若鏈表為空的話,那么頭結點的指針域為空。
三、總結:
在順序表中,由於邏輯上相鄰的兩個元素在物理位置上是緊鄰的,則每個元素的存儲位置都可從線性表起始位置計算得到;而在單鏈表中,各個元素的存儲位置是隨意的,但是它要知道頭指針,才能夠精確定位表中的元素位置。