結構之美:單鏈表的頭結點與頭指針


當鏈表的每個結點只包含一個指針域時,我們稱此鏈表為單鏈表。

關於單鏈表的存取,有時候我們在單鏈表的第一個結點(有效元素)之前附設一個結點,稱之為頭結點;指向頭結點的指針,稱之為頭指針;對單鏈表的存取必須從頭指針開始進行,由於單鏈表的最后一個數據元素沒有直接后繼,則指針為NULL。

對於頭結點,數據域可以不存儲任何信息,也可存儲如鏈表長度等附加信息。

下面是帶頭結點的單鏈表與空表的比較圖。

頭指針與頭結點不同,頭結點即第一個結點,頭指針是指向第一個結點的指針。鏈表中可以沒有頭結點,但不能沒有頭指針。

以下是頭指針與頭結點的關系:

//定義結點的結構體
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList; 

則定義LinkList L;時,L為鏈表的頭指針。

L=(LinkList) malloc (sizeof(LNode)); //創建一個結點

此處返回給L的是一個指針,並且賦給了頭指針。

L->next=null; //這里說明我創建了一個頭結點,即同時運用了頭指針和頭結點。

小結

關於頭指針:

  • 在線性表的鏈式存儲結構中,頭指針是指鏈表指向第一個結點的指針,若鏈表有頭結點,則頭指針就是指向鏈表頭結點的指針。
  • 頭指針具有標識作用,故常用頭指針冠以鏈表的名字。
  • 無論鏈表是否為空,頭指針均不為空。頭指針是鏈表的必要元素。

關於頭結點:

  • 頭結點是為了操作的統一與方便而設立的,放在第一個元素結點之前,其數據域一般無意義(當然有些情況下也可存放鏈表的長度、用做監視哨等等)。
  • 有了頭結點后,對在第一個元素結點前插入結點和刪除第一個結點,其操作與對其它結點的操作統一了。
  • 首元結點也就是第一個元素的結點,它是頭結點后邊的第一個結點。
  • 頭結點不是鏈表所必需的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM