單連結清單
一種以連結方式存儲的線性表,适用于頻繁增删操作,存儲空間不定的情形。
單連結清單的一個存儲結點包含兩個域,資料域和指針域。資料域用于存儲線性表的一個資料元素,指針域用于訓示下一個結點開始的存儲位址。

連結清單第一個結點的位址可通過頭指針找到,其他結點的位址則在前驅結點的指針域中,最後一個結點沒有後繼,用NULL終結。
為了操作的友善,習慣上單連結清單帶一個頭結點,也就是first指向的第一個結點不存放任何資料,從第二個結點開始存放資料。
由于指針域的存在,資料元素的順序與實體存儲順序可能不一緻。
定義與封裝
//結點的定義
struct LinkNode { //連結清單結點類的定義int data; //資料域
LinkNode *link; //鍊指針域
LinkNode() { link = NULL; } //構造函數
LinkNode(int item, LinkNode *ptr = NULL)
{ data = item; link = ptr; } //構造函數
};
帶附加頭結點的插入操作
1、newnode->link = p->link;
2、p->link = newnode;
注意圖中标1和2的位置與代碼相結合
帶附加頭結點的查找操作
查找過程就是從第一個結點開始不斷沿着link域尋到和所需值相同的結點
帶附加頭結點的删除操作
1、q = p->link;
2、p->link = q->link;
3、delete q;
附加頭結點的單連結清單建立
一般單連結清單的建立可采用前插法或者尾插法,
前插法就是每來一個新的結點,就把這個結點插在頭結點的後面。
尾插法就是每來一個新的結點就把這個結點插在連結清單最後一個結點的後面,相比前插法需要設定一個尾指針。
實作插入過程和連結清單的插入操作幾乎無差別。
優點:
長度很容易友善擴充。
缺點:
存儲空間上多了指針域,存儲空間代價比順序表大。
至于帶附加頭節點和不帶附加頭節點的好處,看過書的同學都知道,前者的增删操作更簡練
代碼https://github.com/xiaoYaChh/datastructure.git
參考資料:資料結構第二版,殷人昆,清華大學出版社