讀者diao求二哥:推薦一波數(shù)據(jù)結(jié)構(gòu)與算法的書(shū)單唄!
有個(gè)讀者 diao 要我推薦數(shù)據(jù)結(jié)構(gòu)和算法方面的書(shū),我覺(jué)得很有必要給大家普及一下,因?yàn)樗惴ê蛿?shù)據(jù)結(jié)構(gòu)實(shí)在是太特么重要了——就好像我們?nèi)祟?lèi)離不開(kāi)氧氣,綠色植物離不開(kāi)二氧化碳一樣!
除了 diao,還有個(gè)妹子在后臺(tái)留言給我,也要推薦一波數(shù)據(jù)結(jié)構(gòu)和算法方面的書(shū)籍:

鑒于此,我沒(méi)吃沒(méi)喝耗了兩天的時(shí)間,終于整理好了。除此之外,我還充了百度網(wǎng)盤(pán)的會(huì)員和 CSDN 的會(huì)員(好下載資源),也問(wèn)了好幾個(gè)數(shù)據(jù)結(jié)構(gòu)和算法方面的專(zhuān)家,好驗(yàn)證我的書(shū)單是否值得信賴(lài)——他們異口同聲的肯定了我的付出。
可能有些讀者會(huì)有這樣的疑惑,數(shù)據(jù)結(jié)構(gòu)有什么用?學(xué)習(xí)算法有必要嗎?那我先來(lái)裝模作樣的回答一下這兩個(gè)問(wèn)題。
在計(jì)算機(jī)領(lǐng)域,通常要處理這樣的問(wèn)題:
1)如果將數(shù)據(jù)存儲(chǔ)到計(jì)算機(jī)當(dāng)中。
2)用什么方法來(lái)解決這個(gè)問(wèn)題。
數(shù)據(jù)是一切能輸入到計(jì)算機(jī)中的信息綜合,結(jié)構(gòu)是指數(shù)據(jù)之間的關(guān)系,那數(shù)據(jù)結(jié)構(gòu)就是將數(shù)據(jù)和它們之間的關(guān)系存儲(chǔ)到計(jì)算機(jī)當(dāng)中。怎么實(shí)現(xiàn)存儲(chǔ)呢?就需要選擇合適的算法,效率才會(huì)更高。
Pascal 之父、結(jié)構(gòu)化程序設(shè)計(jì)的先驅(qū) Niklaus Wirth 有一本非常著名的書(shū),叫作《算法 + 數(shù)據(jù)結(jié)構(gòu) = 程序》,可見(jiàn),數(shù)據(jù)結(jié)構(gòu)和算法對(duì)于程序設(shè)計(jì)來(lái)說(shuō),真的非常重要。
數(shù)據(jù)結(jié)構(gòu)和算法,就像操作系統(tǒng)和計(jì)算機(jī)網(wǎng)絡(luò)一樣,看似離我們很近,但似乎又很遠(yuǎn)。
之所以近,是因?yàn)槿绻欢當(dāng)?shù)據(jù)結(jié)構(gòu)和算法,基本上面試就過(guò)不了,不管是校招還是社招。之所以遠(yuǎn),是因?yàn)閷?shí)際工作中,如果不涉及到操作系統(tǒng)、搜索引擎、網(wǎng)絡(luò)調(diào)度等等方面的底層業(yè)務(wù),如果不考慮性能,似乎根本用不到,只要把編程語(yǔ)言封裝好的 API 調(diào)用得當(dāng),只要把框架用的熟練,照樣能把代碼寫(xiě)得 66 的。
作為一名在編程領(lǐng)域摸爬滾打了十多年的老鳥(niǎo),我必須鄭重其事地提醒一下在座的各位。
如果你是大學(xué)生,一定要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法,否則面試碰壁的時(shí)候你會(huì)后悔的,除非你打算在小公司混一輩子。
如果考研的話,數(shù)據(jù)結(jié)構(gòu)也是必考科目。
如果你已經(jīng)參加工作,想要擺脫 CRUD 的標(biāo)簽,也一定要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法,否則只能停留在助理工程師和工程師的階段,無(wú)法更進(jìn)一步。
除此之外,掌握數(shù)據(jù)結(jié)構(gòu)和算法,還有助于閱讀源碼和理解其背后的設(shè)計(jì)思想。
明白了數(shù)據(jù)結(jié)構(gòu)和算法的重要性之后,我相信讀者朋友們已經(jīng)迫不及待、摩拳擦掌、躍躍欲試了,“請(qǐng)告訴我們?cè)撻喿x哪些書(shū)籍吧!”
第一本,《大話數(shù)據(jù)結(jié)構(gòu)》

《大話數(shù)據(jù)結(jié)構(gòu)》 這本書(shū)最大的特點(diǎn)是,它把理論講得很有趣,不枯燥。讀技術(shù)書(shū)最大的煩惱不是這本書(shū)經(jīng)典不經(jīng)典,而是能不能看的進(jìn)去,能看的進(jìn)去,學(xué)到了,這本書(shū)就是好書(shū)。如果看不進(jìn)去,哪怕是再經(jīng)典的書(shū),對(duì)學(xué)習(xí)的能都沒(méi)有一丁點(diǎn)的幫助,對(duì)吧?
網(wǎng)絡(luò)上對(duì)這本書(shū)的評(píng)價(jià)褒貶不一,但總體銷(xiāo)量還是很不錯(cuò)的,作者也是一名老程序員了。書(shū)中的示例用的 C 語(yǔ)言。
第二本,《算法圖解》

就像《算法圖解》(代碼使用 Python 語(yǔ)言實(shí)現(xiàn)的)這本書(shū)副標(biāo)題寫(xiě)的那樣,“像小說(shuō)一樣有趣的算法入門(mén)書(shū)”,主打“圖解”,通俗易懂,學(xué)習(xí)起來(lái)就輕松多了,對(duì)吧?
通過(guò)《大話數(shù)據(jù)結(jié)構(gòu)》和《算法圖解》兩本書(shū)的學(xué)習(xí),我相信讀者朋友們一定能夠入門(mén)數(shù)據(jù)結(jié)構(gòu)和算法了。如果還想更系統(tǒng)、更深入地學(xué)習(xí),請(qǐng)繼續(xù)往下看。
第三本,《數(shù)據(jù)結(jié)構(gòu)和算法分析》

黑皮書(shū),一眼看上去,就知道是一本經(jīng)典書(shū),對(duì)吧?《數(shù)據(jù)結(jié)構(gòu)和算法分析》這本書(shū)的作者也非常用心,例子不僅有 Java 版的,還有 C 版和 C++ 版的。
這就解決了很多讀者朋友們的煩惱,我不擅長(zhǎng) C 啊,我就想看 Java 版的,讀者 giao 就要求我給他推薦一些 Java 版的書(shū)籍。
第四本,《劍指 offer》

這本書(shū)剖析了 80 個(gè)典型的編程面試題,如果能搞懂這本書(shū)里的內(nèi)容,應(yīng)付一般公司的面試應(yīng)該不成問(wèn)題。
直白點(diǎn)說(shuō),學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)會(huì)非常辛苦,那既然付出了這么多心血,我們的目的就很明確,獲得一份更好的工作崗位,《劍指 offer》這本書(shū)一定能夠幫助到我們。
刷題的話,可以選擇??途W(wǎng)或者力扣,如果是 Java 程序員的話,用 Java 刷題就行了。
??途W(wǎng):
https://www.nowcoder.com/ta/coding-interviews
力扣:
https://leetcode-cn.com/problemset/lcof/
認(rèn)認(rèn)真真看完這四本書(shū),如果能夠一個(gè)一個(gè)例子做下來(lái),我相信讀者朋友們就可以拍著胸脯自信地說(shuō),“數(shù)據(jù)結(jié)構(gòu)和算法,我算是拿下了!”
“一千個(gè)讀者,就有一千個(gè)哈姆雷特”,不同的讀者在讀同一本書(shū)的時(shí)候,感受也是不同的。同理,一個(gè)讀者在讀同一個(gè)主題下不同的書(shū)時(shí),收獲也會(huì)大有不同。
那我覺(jué)得,很有必要再推薦一些其他方面的書(shū),供不同的讀者選擇。
第五本,《趣學(xué)數(shù)據(jù)結(jié)構(gòu)》

講解比較生動(dòng),用 C++ 描述的,適合基礎(chǔ)一般的初學(xué)者。作者陳小玉是我們河南的,還寫(xiě)過(guò)另外一本算法方面的書(shū),同樣很適合初學(xué)者。

第六本,《啊哈算法》

一本有趣的算法入門(mén)書(shū),C 語(yǔ)言實(shí)現(xiàn)的,沒(méi)有枯燥的描述,沒(méi)有難懂的公式,一切以實(shí)際應(yīng)用為出發(fā)點(diǎn)。
第七本,《漫畫(huà)算法:小灰的算法之旅》

用漫畫(huà)的形式講述了算法和數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識(shí)、復(fù)雜多變的算法面試題目及算法的實(shí)際應(yīng)用場(chǎng)景。出了兩版,一版 Python,一版 Java。
第八本,《程序員代碼面試指南:IT 名企算法與數(shù)據(jù)結(jié)構(gòu)題目最優(yōu)解》

這是一本程序員代碼面試"神書(shū)”!書(shū)中對(duì) IT 名企代碼面試各類(lèi)題目的最優(yōu)解進(jìn)行了總結(jié),并提供了相關(guān)代碼實(shí)現(xiàn),選取將近 300 道真實(shí)出現(xiàn)過(guò)的經(jīng)典代碼面試題,"刷”完這書(shū),就是"題王”!
同樣可以上??途W(wǎng)上刷題:
https://www.nowcoder.com/ta/programmer-code-interview-guide
第九本,《算法》

這是一本非常適合于自學(xué)以及作為教材的算法書(shū),特點(diǎn)有:基礎(chǔ)非常全面、圖示清晰易懂、數(shù)學(xué)要求低。代碼是通過(guò) Java 實(shí)現(xiàn)的,雖然是一本大部頭書(shū),但難懂的話不過(guò)。
第十本,《數(shù)據(jù)結(jié)構(gòu)與算法之美》
嚴(yán)格意義上說(shuō),這不是一本書(shū),它是 XX 時(shí)間(雖然很隱晦,但還是打錢(qián)吧)平臺(tái)推出的付費(fèi)欄目。推薦原因我就不多說(shuō)了,書(shū)籍看累了,是一種選擇。

就先推薦這十本吧,夠大家學(xué)習(xí)一段時(shí)間了。最后,再來(lái)說(shuō)一說(shuō)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法的方法吧,簡(jiǎn)單來(lái)說(shuō),就兩點(diǎn):
1)選擇一本合適的書(shū)
這個(gè)問(wèn)題,我已經(jīng)幫大家解決了,不論你選擇哪一本,最重要的是開(kāi)始,不要猶豫,早就是優(yōu)勢(shì)。
2)編程實(shí)現(xiàn)和應(yīng)用
理解不代表會(huì)用,對(duì)吧?只有自己親自動(dòng)手去實(shí)現(xiàn),去反復(fù)的練習(xí),才能真正地掌握。第一次練習(xí)可能不記不住,那就第二次、第三次,不要急躁,給自己一點(diǎn)時(shí)間和耐心。
如果你手里有點(diǎn)閑錢(qián),建議直接購(gòu)買(mǎi)紙質(zhì)書(shū)閱讀,不費(fèi)眼;如果手頭確實(shí)緊張,錢(qián)都給對(duì)象買(mǎi)禮物了,那可以掃描下面的二維碼添加一下二哥的微信,我把百度網(wǎng)盤(pán)鏈接發(fā)給你,也許可以緩解一下你的資金壓力:
百度云鏈接:https://pan.baidu.com/s/1rB-CCjjpKPidOio7Ov_0YA 密碼:g5pl
最后,希望二哥這些誠(chéng)懇的建議能夠給大家一點(diǎn)點(diǎn)幫助!love peace and sleep!
