C++ 鏈表筆記
鏈表是對指針的一個應用;所以載體就是指針,或者能存指針的東西
首先聲明一個可以一團數(shù)據(jù)的東西,可以是struct,也可以是class;(PS:如果極端一點,直接把數(shù)據(jù)指針存在數(shù)組里也可以)
以struct為例,里面可以分為兩個部分:地址指針和數(shù)據(jù)指針
鏈表通俗一點理解:就和解密游戲一樣,我根據(jù)門牌號(指針地址)找到個房子,然后再這個房子有很多雜七雜八的東西(數(shù)據(jù)),也有下一個目的地的門牌號(下一個節(jié)點地址)。于是我就可以去尋找下一個房子,而下一個房子里同樣有著數(shù)據(jù)和下下個地址。如此就能從頭一路摸索到尾。
所以寫起來也很簡單。
先聲明結構體,里面他又下一個指針和上一個指針,還有數(shù)據(jù)(也可以是數(shù)據(jù)指針)
我寫在for循環(huán)里面去給這個鏈表賦值,需要提前建好head節(jié)點,其他節(jié)點就新建節(jié)點。
這么寫下來就是雙向列,可以從next向后尋找,也可以last向前尋找。(head和end處理一下,就可以變?yōu)殡p向循環(huán)鏈表)
上面的代碼運行結果為:
如果使用函數(shù)構造的話,新建節(jié)點和賦值會方便很多。
這里遇到一個小問題,寫了構造函數(shù)之后,不使用new出來的對象無法訪問對象,所以單獨寫了個默認的構造函數(shù)來生成鏈表頭。而且頭節(jié)點就變成了個擺設,再次新建節(jié)點的時候直接new的節(jié)點直接添加在了鏈表末尾。頭節(jié)點如果想要存東西,必須單獨來賦值,很難在循環(huán)中賦值。
新建節(jié)點的時候就可以直接帶參new一個節(jié)點:
直接這么使用得到的結果是一個逆序的鏈表,可以使當前節(jié)點指向上一個節(jié)點,但是上一個節(jié)點指向當前節(jié)點還是需要寫在外面。
把里面的值換成一個指針,就可以存下無限多的數(shù)據(jù)
使用的時候先new一個鏈表節(jié)點,然后再new一個data結構體(如果不new一個data結構體,那么nowNode->data就不存在,會報錯)
如此就能直接用cin輸入流給結構體數(shù)據(jù)賦值