想學習資料結構和演算法,推薦給你 10 本優質書單
有個讀者 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 刷題就行了。
牛客網:
https://www.nowcoder.com/ta/coding-interviews
力扣:
https://leetcode-cn.com/problemset/lcof/
認認真真看完這四本書,如果能夠一個一個例子做下來,我相信讀者朋友們就可以拍著胸脯自信地說,“資料結構和演算法,我算是拿下了!”
“一千個讀者,就有一千個哈姆雷特”,不同的讀者在讀同一本書的時候,感受也是不同的。同理,一個讀者在讀同一個主題下不同的書時,收穫也會大有不同。
那我覺得,很有必要再推薦一些其他方面的書,供不同的讀者選擇。
第五本,《趣學資料結構》
講解比較生動,用 C++ 描述的,適合基礎一般的初學者。作者陳小玉是我們河南的,還寫過另外一本演算法方面的書,同樣很適合初學者。
第六本,《啊哈演算法》
一本有趣的演算法入門書,C 語言實現的,沒有枯燥的描述,沒有難懂的公式,一切以實際應用為出發點。
第七本,《漫畫演算法:小灰的演算法之旅》
用漫畫的形式講述了演算法和資料結構的基礎知識、複雜多變的演算法面試題目及演算法的實際應用場景。出了兩版,一版 Python,一版 Java。
第八本,《程式設計師程式碼面試指南:IT 名企演算法與資料結構題目最優解》
這是一本程式設計師程式碼面試"神書”!書中對 IT 名企程式碼面試各類題目的最優解進行了總結,並提供了相關程式碼實現,選取將近 300 道真實出現過的經典程式碼面試題,"刷”完這書,就是"題王”!
同樣可以上牛客網上刷題:
https://www.nowcoder.com/ta/programmer-code-interview-guide
第九本,《演算法》
這是一本非常適合於自學以及作為教材的演算法書,特點有:基礎非常全面、圖示清晰易懂、數學要求低。程式碼是通過 Java 實現的,雖然是一本大部頭書,但難懂的話不過。
第十本,《資料結構與演算法之美》
嚴格意義上說,這不是一本書,它是 XX 時間(雖然很隱晦,但還是打錢吧)平臺推出的付費欄目。推薦原因我就不多說了,書籍看累了,是一種選擇。
就先推薦這十本吧,夠大家學習一段時間了。最後,再來說一說學習資料結構和演算法的方法吧,簡單來說,就兩點:
1)選擇一本合適的書
這個問題,我已經幫大家解決了,不論你選擇哪一本,最重要的是開始,不要猶豫,早就是優勢。
2)程式設計實現和應用
理解不代表會用,對吧?只有自己親自動手去實現,去反覆的練習,才能真正地掌握。第一次練習可能不記不住,那就第二次、第三次,不要急躁,給自己一點時間和耐心。
本文已同步到 GitHub,裡面有百度網盤的下載連結。
最後,希望二哥這些誠懇的建議能夠給大家一點點幫助!love peace and sleep!