1樓:匿名使用者
注意:我們使用連結串列的程式時,最容易忘記的就是使用完畢後,
忘記刪除連結串列(釋放連結串列個結點的資源),你的程式也是如此,
所以你還需要新增一個函式,在主程式退出之前釋放資源.
//新增此函式
void deletelist(book *&head)
}//main函式改為:
void main()
//上面,你可以思考一下,為什麼showbook(head);呼叫後,並且
//在呼叫showbook()函式時是通過指標傳遞的引數head,並且在showbook()
//函式中移動了head指標,為什麼接下來呼叫deletelist()函式時還
//用head作為引數呢?head指標不是已經指向最後結點的null了嗎?
//為什麼函式功能正常?(你可以試著用除錯模式檢驗
//一下函式功能的正確性,你知道原因嗎?
//////////////下面是函式的解釋
book* creat()
else
//如果第一個圖書資訊結點輸入圖書編號不為0的話,就進入下面這個迴圈.
//在迴圈中繼續接受圖書資訊
while(p1->num!=0)
//將上一個結點的"下一個結點指標"指向剛生成的新結點
p2->next=p1;
} //當輸入圖書編號時輸入0時,就退出了上面的迴圈,即,結束了輸入
//但是連結串列已經在迴圈中生成了.
//這裡釋放p1是因為在迴圈中接受輸入圖書編號前p1生成了一個新的
//結點,當輸入圖書編號時輸入0就退出了迴圈,所以這個地方釋放那個
//結點的資源.
delete p1;
//讓最後一個結點的"下一個結點指標"置為空.
p2->next=0;
//返回頭結點
return head;
} void showbook(book*head)
2樓:夢想窗外
#include
class book
;book *head=0;
book* creat()
else
while(1)
else
break;
p2->next=p1;
}delete p1;
p2->next=0;
return head;
}void showbook(book*head);
void clear(book *);
void main()
void showbook(book*head)}// 需要釋放動態分配的記憶體
void clear(book *head)}
3樓:
你的關鍵問題不在於這個程式的理解 ,而且理解這個程式對於你理解指沒有太大的幫助 !所以呢建議你多看看書 ,找點簡短的例子看看 !也不用糾纏在連結串列頭指標上 ,它不是關鍵 !
你是不是問 :
一個含有值 0的指標和 0有什麼區別 ?( 不小得我理解對沒 ,希望對你有幫助 !)
4樓:匿名使用者
不知道你為什麼有這麼種誤解。程式裡頭的第一次if判斷語句就是判斷你輸入的第一個編號是不是為0,如果不是0,就進入了while迴圈。在while循壞中逐步的建立了連結串列。
不過你建立這個連結串列用的new、delete給人一種怪怪的感覺。總覺得你的記憶體**很不完全。
5樓:匿名使用者
這裡的head=0相當於head=null,showbook中的head這時為null,裡面的**不是表明了先建立空間,如果輸入為0,就把建立的空間刪去嗎
C 刪除連結串列節點,C 刪除連結串列節點
struct student del struct head,long num p2 p head while num p num p next null if num p num else include define null 0 struct student struct student de...
已知head指向帶頭結點的單向連結串列,連結串列中每個結點包含字元型資料域(data)和指標域(next)。請編寫函
千里 已知head指向一個帶頭結點的單向連結串列連結串列中每個結點包含字元型資料域data和指標域next。請編寫函式實現連結串列的逆置。 光之琉璃影之殤 include include typedef struct node node,pnode pnode create void void ou...
C語言連結串列問題,c語言連結串列問題
我不知道你用什麼編譯器,不同的編譯器可能結果不一樣。會提示段錯誤的可能是vc編譯器,建議你除錯下 while p1 p1 num 0 struct student next 這個分號你寫錯了,所以會造成字元錯誤,然後定義連結串列的儲存結構是要用typedef struct student的。在主函式...