我是如何自學資料結構的?

2021-09-24 08:44:55 字數 2553 閱讀 3163

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

先說一下學習資料結構之前處於乙個什麼的基礎,大二的時候學校就開設了資料結構的課程,但是當時對資料結構並沒有什麼興趣,一學期下來,如果別人問我知道陣列和鍊錶嗎?我可能在大腦中有點結構印象,其他的資料結構比如:雜湊表、跳表、樹等一點印象都沒有,甚至不知道是什麼。

學習一門技術首先要有動機。那什麼是動機呢?我們經常看到**的人通常在房間裡放一張好身材的,就是為了產生動機每天堅持**。學習也是一樣的,沒有動機就沒有的學習下去的動力。那我學習資料結構的最初動機是什麼呢?快實習了,想讓自己找一家好的公司實習,沒有資料結構與演算法的基礎不可能進入一家理想的公司的,所以我將進入一家理想的公司作為學習的動機。

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

這些都是這半年來每天和資料結構打交道不斷的訓練出來的,這半年基本沒有一天放鬆過,我相信功夫不負有心人,即使基礎再不好,頭腦再笨,通過我總結的操作步驟也能學好資料結構。

因為我上的是一所三流大學,大多數時間考自學,總結了很多的提高學習效率的方法,那麼在學習資料結構上我是怎麼做的呢?我將資料結構的學習分為了三個階段。

第一階段:認識資料結構

第二步:每種資料結構都有它的優缺點和效能的好壞,那我們以什麼標準來衡量資料結構與演算法的效能好快呢?那第二步就學習時間複雜度、空間複雜度相關的複雜度分析的內容,這部分內容至關重要,因為後邊要學到的資料結構與演算法都要有乙個衡量效能標準的,為了能夠不同的問題解決選擇出效能最優的資料結構和演算法。

第二階段:深入資料結構

第一步:上邊最基本的十種資料結構相關特性和使用條件都記錄到本子上了,然後我們從頭開始對每種資料結構進入深入研究,首先資料結構涉及到的操作,比如增、刪、改、查等操作要自己實現一遍,在機器上執行一遍,寫**的時候一定要注意以下幾點:邊界條件、指標、**的規範。

這樣會使你更加的對**有顆敬畏之心,每次寫**都要認真對待,如果機器上寫**沒問題了,可以自己通過在筆記本上用筆手寫親自實現一遍,有利於你加深你的**邏輯的理解。

第三步:單獨的深入學習真的很枯燥雜麼辦,那麼我們就實際生活中的例子去分析,比如猜數字遊戲,我們可以想想怎麼才能在最短的時間內猜到正確的數字呢,可能你會想到使用二分查詢。那好了,我們問一下自己二分查詢存在的問題,這個過程中一定要多問自己為什麼,只有這樣你的知識層次才會得到擴充套件,比如二分查詢如果資料中有重複資料怎麼解決?

我還是要強調一下,一定要多問自己為什麼,因為從心理學上來講,人的大腦符合最小阻力原則,就是思考的事情最不喜歡做,所以這裡我們要逆著來,才能進一步進行突破。如果你覺的上述兩個階段沒有問題了,我們就進行下面的第三個階段檢索資料結構。

第三階段:檢索資料結構

第一步: 這時你可能學的非常多的關於資料結構的內容,但是很難運用,那怎麼能夠在實際實際問題中運用起來呢?第一步先要做整理,將前邊零碎的知識點整理到筆記本上,怎麼整理呢?我們可以借助思維導圖,對知識體系化整理,無論是複習鞏固都利於我們進一步加強。

第二步:上述整理完畢之後,你到實際專案中會發現,很多問題涉及到多個資料結構問題,我們淺表解決的還不過是針對單一的資料結構,那就嘗試著自己將資料結構之間建立聯絡,比如陣列和鍊錶,每種資料結構都有優缺點,你在學習的過程中你會發現乙個資料結構的優點正是另一資料結構的缺點,或者說這種資料結構可以解決的問題可以彌補另一種資料結構不能解決的問題,反覆思考之後整理下來,方便以後在此基礎上進行擴充套件。

第三步:將實際問題轉換成所學的資料結構,遇到問題,根據問題或者資料的特徵找到適用的資料結構,比如我們需要快速的插入、刪除、查詢資料,我們在大腦中快速的檢索可以快速的實現插入、刪除、查詢的資料結構有哪些?平衡二叉樹、雜湊表、跳表等。然後根據問題另一條件或者特徵在這些資料結構中進行篩選。

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

上述是我學習資料結構的三個階段,如果你完成了上述的三個階段,認為是不是沒有任何問題了?不是的,因為我們會解決問題遇到很多情況,我們傑接下來怎麼做呢?

我們把每次解決問題或者每一遍去複習資料結構都要有所收穫,同樣的知識怎麼增加自己的收穫呢?那就是要不斷的反饋給自己資訊,比如,雜湊衝突當前的解決方法在實際專案中不適用,那我將這個資訊反饋給自己,問一下自己有沒有更好的解決辦法?反饋之後,接下來就是提高學習的標準了。

學習資料結構總會遇到瓶頸的,當我們走出瓶頸之後就會很順利很多,那你會問接下來有沒有再提高的可能了?會有的,接下來你就講提高自身的標準,比如你解決生活中的實際問題讓自己有下意識解決問題的能力,不借助任何參考資料,這方面對自身的要求很高的,再比如提高工作的效率,看起來非常高標準的,我相信每個人只有不斷的通過努力的實踐、反饋總有一天會鍛鍊出來這種能力的,相信你。

我是如何學習資料結構與演算法的?

學習演算法的捷徑就是多刷題 說實話,要說捷徑,我覺得就是腳踏實地著多動手去刷題,多刷題。但是,如果你是小白,也就是說,你連常見的資料結構,如鍊表 樹以及常見的演算法思想,如遞迴 列舉 動態規劃這些都沒學過,那麼,我不建議你去刷題的。而是先去找本書先去學習這些,然後再去刷題。說實話,我那一學期的時間幾...

自學考試 資料結構

1.帶頭結點的單迴圈鍊錶的頭指標為head,則判斷該鍊錶是否為空的條件是head next head 2.不需要判斷棧是否為空的是 進棧 3.對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,則n0 n2 1 4.m個葉結點的哈夫曼樹中,其結點總數為2m 1 5.用n表示圖中頂點...

資料結構 什麼是資料結構?

緒論 其實,資料結構在計算機科學界至今沒有標準的定義。個人根據各自的理解的不同而有不同的表述方法 資料結構是資料物件,以及存在於該物件的例項合組成例項的資料元素之間的各種聯絡。這些聯絡可以通過定義相關的函式來給出。他將資料物件 data object 定義為 乙個資料物件是例項或值的集合 其實,究竟...