數據結構是編程人的痛點,今天我來教大家如何自學入門!


很多小伙伴向我詢問應該如何自學數據結構,或者怎么才能學好數據結構和算法?這次結合我的個人經驗,給大家介紹一些學習數據結構和算法的方法,幫大家規避一些學習數據結構和算法過程中可能會踩的坑。

首先我認為,學習數據結構和算法有一個很重要的前提,就是至少初步掌握一門編程語言。學習數據結構和算法,實踐是非常重要的,如果僅僅是空有理論而不實踐,反復學多少遍都沒用。

因為無論是數據結構還是算法,它教會我們的是解決問題的思想,並不掛靠某一門具體的編程語言。換句話說,在掌握任何一門編程語言的基礎上,都可以學習數據結構和算法。

其次對於初學者來說,好的學習資源是非常重要的。要知道,學習數據結構需要讀者有一定的空間想象能力,所以強烈建議家人們在看文字資料的同時,再找一套相應的視頻資料,兩者結合來學習,往往會事半功倍。

那么,有哪些不錯的學習資源呢?我個人推薦嚴蔚敏老師的《數據結構(C語言版)》以及她錄制的數據結構視頻資料。

另外,市面上還有很多不錯的學習資料,例如《大話數據結構》、《數據結構與算法分析》等,同時慕課(mooc)上也有很多講解數據結構和算法的視頻資料,這里不再一一舉例。

除了熟練精通一門編程語言、有一套不錯的學習資料之外,最重要的是找到一個好的學習方法。其實數據結構和算法並不難,之所以有小伙伴認為它很難,是因為你的學習方法不對。

————————————————

在這里,我把自己的學習方法推薦給大家,可以總結為 6 個字:多動筆、多動手。

所謂“多動筆”,在學習數據結構和算法的過程中,要邊學習邊畫圖。因為,對於數據結構中的存儲結構來說,尤其是樹結構和圖結構,存儲結構確實比較復雜,僅靠空間想象難免會有紕漏,而通過親手畫圖往往能避免很多“坑”。

以學習鏈表(后續章節會做詳細講解)為例,如果我們想象不到它是怎樣存儲數據,就應該嘗試動手將它畫出來,如下圖所示:


畫鏈表

上圖是用畫圖工具制作的,讀者在實際畫圖時,只需要做到心中有數即可。

由此,我們就畫了一個存有 {1,2,3,4} 數據的鏈表。

不僅如此,假設在上圖的基礎上想刪除存儲元素 3 的結點,也可以先通過畫圖來實現:


刪除某個結點

如上圖所示,整個畫圖的過程,也是我們思考如何通過程序實現刪除指定節點的過程:

        Ⅰ、為了刪除存有元素 3 的結點,先要找到它的前驅結點,也就是結點 2,並用一個指針 p 來標記;

        Ⅱ、借助指針 p,可以順利找到結點 3,因為它最終要被摘除,考慮到該結點占用的空間要手動釋放,因此還要用一個指針 q 來標記它;

        Ⅲ、借助指針 p 和 q(也就是圖中的第 3 步),就可以成功將目標結點摘下來;

        Ⅳ、最后借助指針 q,可以釋放被刪除節點所占用的存儲空間。

以上就是為了刪除存儲元素 3 的結點,整個畫圖的流程。

再次強調,畫圖的過程是思考如何用程序實現的過程,並不是隨意勾畫。

除此之外,在學習某些算法時,也可以借助畫圖來加深自己的理解。甚至在閱讀它人實現的代碼時,可以邊閱讀代碼邊畫圖,這樣可以更快理清代碼的實現邏輯。

在通過“多動手”實現理解存儲結構和實現邏輯的基礎上,初學者還要“多動手”編寫實現代碼。注意,對於某一種存儲結構或者算法,沒有 3 遍以上自己獨立的實現過程,是很難做到融會貫通的。

另外,很多初學者都存在“當時搞清楚了,過段時間又忘了”的情況。

其原因大致有 2 個,一個是當時學的時候就沒有徹底搞懂,或者處於“似懂非懂”的狀態;另一個原因就是長時間沒有再接觸過它,所以淡忘了。其中如果是第一種原因導致的,那只能從頭再學;對於第二種情況,家人們不需要過度懊惱,只要我們再回顧一遍,通常是可以快速回憶起來的。

總之,數據結構確實是一門比較難理解的學科,而且學習過程沒有任何捷徑可走。這意味着,想要學好數據結構,除了找一套適合自己的學習資料和學習方法外,更要有一種“死磕”的精神,有句話說的很好,“不逼自己一把,永遠不知道自己有多大的潛力”。


 

不管你是轉行也好,初學也罷,進階也可,如果你想學編程,進階程序員~

【值得關注】我的 編程學習交流俱樂部 !【點擊進入】

C語言入門資料:


 

C語言必讀書籍:


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM