搜尋此網誌

2019年6月4日 星期二

程設的最後一個題目(三)

串列的樣子:


    有滿多人會不習慣這個寫法的,怎麼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)


實作:


程式碼

輸入資料

輸入完資料後會產生如上的串列

沒有留言:

張貼留言