有個讀者 diao 要我推薦數據結構和算法方面的書,我覺得很有必要給大家普及一下,因為算法和數據結構實在是太特么重要了——就好像我們人類離不開氧氣,綠色植物離不開二氧化碳一樣!
請肆無忌憚地點贊吧,微信搜索【沉默王二】關注這個在九朝古都洛陽苟且偷生的程序員。
本文 GitHub github.com/itwanger 已收錄,里面還有我精心為你准備的一線大廠面試題。
除了 diao,還有個妹子在后台留言給我,也要推薦一波數據結構和算法方面的書籍:

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

《大話數據結構》 這本書最大的特點是,它把理論講得很有趣,不枯燥。讀技術書最大的煩惱不是這本書經典不經典,而是能不能看的進去,能看的進去,學到了,這本書就是好書。如果看不進去,哪怕是再經典的書,對學習的能都沒有一丁點的幫助,對吧?
網絡上對這本書的評價褒貶不一,但總體銷量還是很不錯的,作者也是一名老程序員了。書中的示例用的 C 語言。
第二本,《算法圖解》

就像《算法圖解》(代碼使用 Python 語言實現的)這本書副標題寫的那樣,“像小說一樣有趣的算法入門書”,主打“圖解”,通俗易懂,學習起來就輕松多了,對吧?
通過《大話數據結構》和《算法圖解》兩本書的學習,我相信讀者朋友們一定能夠入門數據結構和算法了。如果還想更系統、更深入地學習,請繼續往下看。
第三本,《數據結構和算法分析》

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

這本書剖析了 80 個典型的編程面試題,如果能搞懂這本書里的內容,應付一般公司的面試應該不成問題。
直白點說,學習算法和數據結構會非常辛苦,那既然付出了這么多心血,我們的目的就很明確,獲得一份更好的工作崗位,《劍指 offer》這本書一定能夠幫助到我們。
刷題的話,可以選擇牛客網或者力扣,如果是 Java 程序員的話,用 Java 刷題就行了。
牛客網:
力扣:
認認真真看完這四本書,如果能夠一個一個例子做下來,我相信讀者朋友們就可以拍着胸脯自信地說,“數據結構和算法,我算是拿下了!”
“一千個讀者,就有一千個哈姆雷特”,不同的讀者在讀同一本書的時候,感受也是不同的。同理,一個讀者在讀同一個主題下不同的書時,收獲也會大有不同。
那我覺得,很有必要再推薦一些其他方面的書,供不同的讀者選擇。
第五本,《趣學數據結構》

講解比較生動,用 C++ 描述的,適合基礎一般的初學者。作者陳小玉是我們河南的,還寫過另外一本算法方面的書,同樣很適合初學者。

第六本,《啊哈算法》

一本有趣的算法入門書,C 語言實現的,沒有枯燥的描述,沒有難懂的公式,一切以實際應用為出發點。
第七本,《漫畫算法:小灰的算法之旅》

用漫畫的形式講述了算法和數據結構的基礎知識、復雜多變的算法面試題目及算法的實際應用場景。出了兩版,一版 Python,一版 Java。
第八本,《程序員代碼面試指南:IT 名企算法與數據結構題目最優解》

這是一本程序員代碼面試"神書”!書中對 IT 名企代碼面試各類題目的最優解進行了總結,並提供了相關代碼實現,選取將近 300 道真實出現過的經典代碼面試題,"刷”完這書,就是"題王”!
同樣可以上牛客網上刷題:
第九本,《算法》

這是一本非常適合於自學以及作為教材的算法書,特點有:基礎非常全面、圖示清晰易懂、數學要求低。代碼是通過 Java 實現的,雖然是一本大部頭書,但難懂的話不過。
第十本,《數據結構與算法之美》
嚴格意義上說,這不是一本書,它是 XX 時間(雖然很隱晦,但還是打錢吧)平台推出的付費欄目。推薦原因我就不多說了,書籍看累了,是一種選擇。

就先推薦這十本吧,夠大家學習一段時間了。最后,再來說一說學習數據結構和算法的方法吧,簡單來說,就兩點:
1)選擇一本合適的書
這個問題,我已經幫大家解決了,不論你選擇哪一本,最重要的是開始,不要猶豫,早就是優勢。
2)編程實現和應用
理解不代表會用,對吧?只有自己親自動手去實現,去反復的練習,才能真正地掌握。第一次練習可能不記不住,那就第二次、第三次,不要急躁,給自己一點時間和耐心。

本文已同步到 GitHub,里面有百度網盤的下載鏈接。
最后,希望二哥這些誠懇的建議能夠給大家一點點幫助!love peace and sleep!