學習數據結構的意義

可能有很多同學在沒開始學甚至學完後都不清楚學數據結構的意義。
本人做題渣,不太會刷題,所以最開始對這種我還不明白學它的意義的科目(不要說是爲了考試!)保持一種牴觸的情緒,隨着接觸的東西越來越多,發表一點拙見吧,也爲同樣迷茫的小夥伴做個開路先鋒。

我先矯情一句——不論通天的思路多麼地優雅和藝術,但到作爲成果時他們總是把能一步步走上來的梯子(意圖和思路)撤走,取而代之的是難以攀爬的峭壁(一步步機器執行過程)並留下那峭壁之上的空中閣樓(結論)。

我不想談那些不具體的“掌握好數據結構,也就掌握好了數據處理的算法;學習數據結構很重要”那種套話,因爲那些話是從沒做過什麼東西的人都能說的出來的!培訓機構、假大佬等不講什麼具體用處讓人云裏霧裏又覺得神乎其神,本人一直反對的也是這些。學習從來都是在解決問題的過程中發生的,沒有相應問題對象的學習如同“沒有金蛇劍就學習金蛇劍法”一般反人類。

1.數據結構是計算機方便實現的方式

這麼說大家有些明白了吧,既然連和計算機溝通的”語言“都學了,那麼”常見的短語和習慣用法“(不知道這個比喻是否恰當)也應該學了。

底層彙編有棧寄存器,學的數據結構裏有棧指針
c++裏有STL庫,方便的vector模板類。

2.算法需要相應的數據結構做基礎
我們編程不可能”只用來做算術題“(找到一句話:當今處理非數值計算性問題佔用了85%以上的機器時間)
例如在c語言裏我們有現有的char、int數組等數據類型,構建數據結構時我們可以偷懶用數組來代替串,但是樹、圖等數據結構我們就不得不用關鍵詞struct結構體來構建,同時構建的方法我們因爲要學習例如十字鏈表法等。

KMP算法,“串”的數據結構,減少匹配次數來解決優化匹配速度問題
Kruskal算法,“圖”的數據結構,生成最小生成樹

3.用編程語言(或框架),構建一種數據結構,完成相應的算法,解決相應問題。
這就是現階段我能總結出最簡短卻最貼切的總結了。
不要把算法吹的神乎其神,就是能解決問題的程序罷了,只不過越高端快速的算法越在思維上顯得不直接,比如快速排序就是融合了二分法的遞歸。

4.數據結構,基礎算法。問題意圖與分類
記住方法特徵來命名永遠比記住方法名字建立的聯繫更加牢靠。(比如:Kruskal算法–避圈法)

常用的數據結構有:數組、鏈表、堆棧、樹、圖
常用的排序算法有:希爾排序、冒泡排序、快速排序、選擇排序
常用的查找算法有:順序查找、折半查找、分塊查找等。

5.分清“道”與“器”
形而上者謂之道,形而下者謂之器
“道”是方法,對比具體的代碼,僞代碼就是道、數據結構的描述就是道。
“器”是具體的,我過去就很喜歡可運行代碼,但是要配置相應環境。
你會冒泡排序,讓你用僞代碼、流程圖、c++、java都應該能寫出冒泡排序;
你會算數,讓你用漢字、英文、阿拉伯數字都應該能寫出演算過程並得到結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章