我是如何自學數據結構的?

【轉載請說明出處】:juejin.im/post/5c8464…前端

寫在前邊

你們好,我叫小鹿,目前正在上大三。今天呢,我想簡單的分享一下半年來自學數據結構與算法學習方法和技巧。寫這篇文章主要目的仍是重在讓剛剛接觸數據結構的讀者按照總結步驟進行階段性學習。算法

小鹿上的一所普通的三本大學,大學的三年時間基本在自學編程,畢竟課上老師所授的課程很淺,老師講述一個知識點是要考慮到大部分不一樣理解能力學生的,因此對於我這種喜歡刨根問底的學生從大一開始不得不花費大量的時間來自學編程。自學呢,我更注重效率,效率在哪裏來?我相信不少自學編程的人最講究的就是方法和技巧,而小鹿的學習方法是不斷的幾個階段循環總結而出的,那就是動機、目標、實踐、反饋、提升標準編程

個人基礎

先說一下學習數據結構以前處於一個什麼的基礎,大二的時候學校就開設了數據結構的課程,可是當時對數據結構並無什麼興趣,一學期下來,若是別人問我知道數組和鏈表嗎?我可能在大腦中有點結構印象,其餘的數據結構好比:散列表、跳錶、樹等一點印象都沒有,甚至不知道是什麼。數組

個人學習動機

學習一門技術首先要有動機。那什麼是動機呢?咱們常常看到減肥的人一般在房間裏放一張好身材的圖片,就是爲了產生動機天天堅持減肥。學習也是同樣的,沒有動機就沒有的學習下去的動力。那我學習數據結構的最初動機是什麼呢?快實習了,想讓本身找一家好的公司實習,沒有數據結構與算法的基礎不可能進入一家理想的公司的,因此我將進入一家理想的公司做爲學習的動機。微信

個人目標

通過大三上半年對數據結構的自學,和之前那個本身相比有了質的飛躍,從最基礎的某一數據結構的由來、是什麼,特色以及優缺點到實際項目中應該如何運用,再到如何培養本身下意識的數據結構(遇到問題,根據問題的特性就能下意識的想到用哪一個數據結構來解決)。到後來逐漸的學會了將多種數據結構聯繫起來進行解決問題,這樣作的目的就是可以讓程序性能更加穩定,效率更加高效。數據結構

這些都是這半年來天天和數據結構打交道不斷的訓練出來的,這半年基本沒有一天放鬆過,我相信功夫不負有心人,即便基礎再很差,頭腦再笨,經過我總結的操做步驟也能學好數據結構。數據結構和算法

個人實踐

由於我上的是一所三流大學,大多數時間考自學,總結了不少的提升學習效率的方法,那麼在學習數據結構上我是怎麼作的呢?我將數據結構的學習分爲了三個階段。post

第一階段:認識數據結構

第一步:學習它就應該知道它用來幹什麼,爲何,怎麼作,小鹿建議去看一些基礎的數據結構書籍或者藉助百度和谷歌瞭解一下。性能

第二步:每種數據結構都有它的優缺點和性能的好壞,那咱們以什麼標準來衡量數據結構與算法的性能好快呢?那第二步就學習時間複雜度、空間複雜度相關的複雜度分析的內容,這部份內容相當重要,由於後邊要學到的數據結構與算法都要有一個衡量性能標準的,爲了可以不一樣的問題解決選擇出性能最優的數據結構和算法。學習

第三步:上邊咱們瞭解到性能的衡量標準,那下一步就要開始學習最經常使用的幾種數據結構:數組、鏈表、棧、隊列、散列表、跳錶、圖、樹、堆、字典樹10種數據結構。第一階段不要求咱們瞭解這些數據結構,從如下幾個方面來學習。由來、特性、適用條件、有哪些操做、每種操做的時間複雜度分析以及可否進行優化,這期間你會遇到各類問題,遇到問題怎麼作,我一般會去百度或者谷歌藉助別人寫的文章進行總結記錄到筆記本上。

第二階段:深刻數據結構

第一步:上邊最基本的十種數據結構相關特性和使用條件都記錄到本子上了,而後咱們從頭開始對每種數據結構進入深刻研究,首先數據結構涉及到的操做,好比增、刪、改、查等操做要本身實現一遍,在機器上運行一遍,寫代碼的時候必定要注意如下幾點:邊界條件、指針、代碼的規範。

這樣會使你更加的對代碼有顆敬畏之心,每次寫代碼都要認真對待,若是機器上寫代碼沒問題了,能夠本身經過在筆記本上用筆手寫親自實現一遍,有利於你加深你的代碼邏輯的理解。

第二步:你可能會問,第一階段每種數據結構特性基本瞭解了,看什麼書籍或者視頻才能深刻了解呢,關於視頻資料我就再也不這裏推薦了,推薦書籍吧,這並非打廣告哈。要想深刻咱們要一本有權威的數據,想查什麼就會有個權威的解釋,《算法導論》這本書雖然很厚,可是每次查找都能找到我想找的,就當作一本詞典查了,擴充本身知識體系了。

第三步:單獨的深刻學習真的很枯燥雜麼辦,那麼咱們就實際生活中的例子去分析,好比猜數字遊戲,咱們能夠想一想怎麼才能在最短的時間內猜到正確的數字呢,可能你會想到使用二分查找。那好了,咱們問一下本身二分查找存在的問題,這個過程當中必定要多問本身爲何,只有這樣你的知識層次纔會獲得擴展,好比二分查找若是數據中有重複數據怎麼解決?

我仍是要強調一下,必定要多問本身爲何,由於從心理學上來說,人的大腦符合最小阻力原則,就是思考的事情最不喜歡作,因此這裏咱們要逆着來,才能進一步進行突破。若是你覺的上述兩個階段沒有問題了,咱們就進行下面的第三個階段檢索數據結構。

第三階段:檢索數據結構

第一步: 這時你可能學的很是多的關於數據結構的內容,可是很難運用,那怎麼可以在實際實際問題中運用起來呢?第一步先要作整理,將前邊零碎的知識點整理到筆記本上,怎麼整理呢?咱們能夠藉助思惟導圖,對知識體系化整理,不管是複習鞏固都利於咱們進一步增強。

第二步:上述整理完畢以後,你到實際項目中會發現,不少問題涉及到多個數據結構問題,咱們淺表解決的還不過是針對單一的數據結構,那就嘗試着本身將數據結構之間創建聯繫,好比數組和鏈表,每種數據結構都有優缺點,你在學習的過程當中你會發現一個數據結構的優勢正是另外一數據結構的缺點,或者說這種數據結構能夠解決的問題能夠彌補另外一種數據結構不能解決的問題,反覆思考以後整理下來,方便之後在此基礎上進行擴展。

第三步:將實際問題轉換成所學的數據結構,遇到問題,根據問題或者數據的特徵找到適用的數據結構,好比咱們須要快速的插入、刪除、查詢數據,咱們在大腦中快速的檢索能夠快速的實現插入、刪除、查詢的數據結構有哪些?平衡二叉樹、散列表、跳錶等。而後根據問題另外一條件或者特徵在這些數據結構中進行篩選。

第四步: 怎麼篩選呢?就用到咱們前邊講到的性能分析,時間複雜度、空間複雜度,知道選出合理的方案。

上述是我學習數據結構的三個階段,若是你完成了上述的三個階段,認爲是否是沒有任何問題了?不是的,由於咱們會解決問題遇到不少狀況,咱們傑接下來怎麼作呢?

個人反饋

咱們把每次解決問題或者每一遍去複習數據結構都要有所收穫,一樣的知識怎麼增長本身的收穫呢?那就是要不斷的反饋給本身信息,好比,散列衝突當前的解決方法在實際項目中不適用,那我將這個信息反饋給本身,問一下本身有沒有更好的解決辦法?反饋以後,接下來就是提升學習的標準了。

提升標準

學習數據結構總會遇到瓶頸的,當咱們走出瓶頸以後就會很順利不少,那你會問接下來有沒有再提升的可能了?會有的,接下來你就講提升自身的標準,好比你解決生活中的實際問題讓本身有下意識解決問題的能力,不借助任何參考數據,這方面對自身的要求很高的,再好比提升工做的效率,看起來很是高標準的,我相信每一個人只有不斷的經過努力的實踐、反饋總有一天會鍛煉出來這種能力的,相信你。


本公衆號專一於「前端」、「數據結構」互聯網技術領域,通俗簡單的文字和動漫配圖,讓你愛上編程。

一個不甘平凡的碼農

微信公衆號:一個不甘平凡的碼農
相關文章
相關標籤/搜索