串列的樣子:
有滿多人會不習慣這個寫法的,怎麼struct裡還有一個struct的指標?那個指標,說到底,也只是個變數而已,它在做的是跟那個data差不多,只不過它紀錄的是"記憶體位置"。能指向int型態變數的指標,型態也是int,所以如果我們想要一個能指向struct list的指標,那個指標的型態也要是struct list。
新增資料(第一筆):
 |
1 |
malloc那邊,我們讓它分配了一塊跟struct list一樣大的記憶體空間(用sizeof可以得到大小),然後回傳那個記憶體位置,因為cur是struct list結構的指標,所以它能記住的也只有跟它有著相同型態的變數(就像你不能讓一個int型態的變數去記3.14,會出錯),所以我們要在前面用(struct list *)把它轉成跟cur相同的型態。
接著讓first指向cur,由於cur記著那塊新開記憶體的位置,所以 "
first=cur; "會讓first指向跟cur 相同的地方。
基本上,第一筆以後的資料都是用這樣的方法來加資料的,所以上面那個可以放在迴圈裡來 做。
 |
把新資料的next指向NULL,代表串列的結束(也可用first來做)
|
新增資料(第一筆後的其它筆資料):
如果在第一筆資料新增完後我們還想再加入其它筆資料,我們會需要再額外一個指標來幫忙。
 |
新指標
|
 |
給值
|
 |
讓pre指向跟cur指的相同位置
|
 |
再分配一個記憶體空間,並讓cur指著
|
 |
給值
|
 |
把pre所指的struct的next指向cur所指的記憶體位置
|
 |
把cur所指struct的next指向NULL,代表串列的結束
|
 |
最後記得要讓pre指向cur |
PS:我們可以在創造串列之前,先把first的值指向NULL,用以判斷當下加入的是不是第一筆資料(因為在加入第一筆資料後,first就會指向第一筆資料的位置,所以first的值不再是NULL)
實作:
 |
程式碼
|
 |
輸入資料 |
 |
輸入完資料後會產生如上的串列 |
沒有留言:
張貼留言