1,基於順序存儲結構插入或刪除元素時候會涉及大量元素移動,非常影響效率,本文着手解決這個問題;
2,鏈式存儲結構為了彌補順序存儲結構效率上的問題;
3,鏈式存儲的定義:

1,為了表示每個數據元素與其后繼元素之間的邏輯關系,數據元素除了存儲本身的信息外,還需要存儲其直接后繼的信息;
2,幼兒園排隊:每個小朋友記住他前面的小朋友是誰,這樣可以輕易的排隊;
4,一定要分清 p->next 是左值還是右值,左值時表示節點內存儲的位置,右值時表示節點對象;
5,鏈式存儲邏輯結構:
1,基於鏈式存儲結構的線性表中,每個節點都包含數據域和指針域:
1,數據域:存儲數據元素本身;
2,指針域:存儲相鄰節點地址;

6,專業術語:
1,順序表:
1,基於順序存儲結構的線性表;
2,鏈表:
1,基於鏈式存儲結構的線性表:
1,單鏈表:每個節點只包含直接后繼的地址信息;
2,循環鏈表:單鏈表中的最后一個節點的直接后繼為第一個節點;
3,雙向鏈表:單鏈表中的結點包含直接前驅和后繼的地址信息;
4,雙向循環鏈表
7,不同類型鏈表:
1,單鏈表見:

2,循環鏈表:

3,雙向鏈表見:

8,鏈表中的基本概念:
1,頭結點:
1,鏈表中的輔助節點,包含指向第一個數據元素的指針;
2,沒什么用,但實際工程中,發現增加頭結點代碼變簡單了、維護性變好了,所以其僅僅輔助我們簡化代碼,其不包含任何信息,僅僅包含一個指向直接后繼的地址;指向的是線性表中的第零個元素;
2,數據節點:
1,鏈表中代表數據元素的節點,表現形式為:(數據元素,地址);
3,尾結點:
1,鏈表中的最后一個數據節點,包含的地址信息為空;
2,決定了鏈表的性質:
1,空,為單鏈表;
2,第一個節點,為循環鏈表;
3,隨機值,非法鏈表;
9,單鏈表中的結點定義:

10,單鏈表中的內部結構:

1,頭結點在單鏈表中的意義:
1,輔助數據元素的定位,方便插入和刪除操作,因此,頭結點不存儲實際的數據元素;
11,在目標位置處插入數據元素:
1,從頭結點開始,通過 current 指針定位到目標位置(插入到 i 節點,就移動 i 次;不能隨機存取,這是鏈表缺點);
2,從堆空間申請新的 Node 節點;
3,執行操作(一定要明白指針的左值和右值的含義):
node->value = e;
node->next = current->next;
current->next = node;


12,在目標位置處刪除數據元素:
1,從頭結點開始,通過 current 指針定位到目標位置(不能隨機存取,這是鏈表缺點);
2,使用 toDel 指針指向需要刪除的節點(保證刪除后鏈表可用);
3,執行操作:
toDel = current->next;(這里是位置上被傳遞了要刪除的對象)
current->next = toDel->next;(刪除之前要先指向要刪除后面的結點)
delete toDel;
也可以:
current->next = current->next->next;
delete current->next;

13,小結:
1,鏈表中的數據元素在物理內存中無相鄰關系;
2,鏈表中的節點都包含數據域和指針域;
3,頭結點用於輔助數據元素的定位,方便插入和刪除操作;
4,插入和刪除操作需要保證鏈表的完整性;
