C/C++編程筆記:同樣是數(shù)據(jù)類型,鏈表對比數(shù)組?哪一個更香?
說起鏈表,第一反應(yīng):鏈表是一種數(shù)據(jù)類型!它可以用來存儲同種類型多個批量數(shù)據(jù)。

有了這種認(rèn)知,很容易去聯(lián)想到數(shù)組,它也是一種數(shù)據(jù)類型,也可以用來存儲同種類型的批量數(shù)據(jù)。初學(xué)者往往對數(shù)組的印象比較好,比如想要存一批整數(shù),就可以定義一個一維整形數(shù)組,用數(shù)組存儲,簡單直觀且方便。
那為什么要引入鏈表呢?
這里主要的原因是數(shù)組它是有缺點的:首先,數(shù)組是采用靜態(tài)分配的方式。
什么意思呢?就是說你想在程序中用數(shù)組,就要先定義數(shù)組,寫一個說明語句放在執(zhí)行語句之前。我們的變量都是先定義后使用的嘛,在這個說明語句的部分,數(shù)組的長度已經(jīng)被判死刑了。
在后續(xù)操作中,我們既無法對已分配的存儲單元進(jìn)行擴(kuò)充或者更變,也不能通過編程的方式對沒有充分利用的資源進(jìn)行回收,這就是所謂的靜態(tài)分配。

有同學(xué)可能有疑問,靜態(tài)就靜態(tài)唄,有什么問題嗎?問題在于,在某些情況下,你無法確定數(shù)據(jù)的大致規(guī)模,或者數(shù)據(jù)規(guī)模需要針對不同用戶進(jìn)行相應(yīng)的調(diào)整。
比如說,對于一個學(xué)生管理系統(tǒng),采用數(shù)組的方式存儲數(shù)據(jù)的話:如果用戶是一個班級,100個單元就夠用;對于一個院系,可能要1000個單元;對于幾個院系,可能要上萬個單元。
那么你想讓自己的系統(tǒng)能夠同時滿足這些用戶的需求,就理應(yīng)采用最大的規(guī)模,也就是應(yīng)該在說明語句中把數(shù)組的規(guī)模做到一萬。而只要定義了變量,系統(tǒng)就會分配存儲單元。
實際應(yīng)用中,哪怕只用到其中的1個單元,系統(tǒng)也會分配一萬的單元,多余的單元程序不會使用到,別的變量也沒辦法用,屬于典型的占著什么不什么。

數(shù)組的另外一個缺陷是:必須使用連續(xù)的內(nèi)存單元。對于一個領(lǐng)著100個游客住旅館的導(dǎo)游,如果采用數(shù)組方式住店,假如旅店的空房間數(shù)量遠(yuǎn)遠(yuǎn)多于100個,但任何一個地方都沒有連續(xù)的100個房間。
那就比較尷尬了,老板娘只好提示你系統(tǒng)內(nèi)存空間不夠,不讓你住店,也不讓你的程序執(zhí)行。
那么將來我們引入鏈表就可以巧妙地解決這兩個問題:首先我們的鏈表不是在執(zhí)行語句運行前提前定義的,而是可以按照用戶的需求動態(tài)分配,更加靈活高效;其次,采用鏈表方式也需要內(nèi)存單元,但是不再需要連續(xù)的內(nèi)存。
那討論到這里的話:鏈表這么完美,數(shù)組全是缺點,以后全部用鏈表不就好了嗎?

但是鏈表也有缺點。比如說它定義形式更加復(fù)雜,給編程者有一定的學(xué)習(xí)門檻;無法直接定位鏈表中某一個元素,而只能通過前導(dǎo)依次遍歷會降低訪問效率等等。
在開發(fā)實踐中,到底應(yīng)該使用哪種數(shù)據(jù)類型,應(yīng)該根據(jù)實際需要靈活變動,不能而在某一種方式上鉆牛角尖。
對于更多的開發(fā)人員而言,我們對自己的定位應(yīng)該是語言的使用者,而非語言的研究者。所以編程實踐中,如何采用合理、高效有用的方式才是我們真正需要考慮的東西,而非去一味追求刁鉆的技巧技法,千萬不要陷入“能力的怪圈”。
感謝閱讀,學(xué)習(xí)使人強大。
自學(xué)C/C++編程難度很大,如果你想更快提升自己的編程能力和編寫項目的水平,歡迎一起共同成長!

另外,UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會對你有幫助的~