數(shù)據(jù)結(jié)構(gòu)的作用及學習方法

  一、項目開發(fā)

  1.程序設(shè)計的本質(zhì)?

  程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法

  數(shù)據(jù)是計算機化的信息,它是計算機可以直接處理的最基本和最重要的對象。無論是進行科學計算或數(shù)據(jù)處理、過程控制以及對文件的存儲和檢索及數(shù)據(jù)庫技術(shù)應(yīng)用等,都是對數(shù)據(jù)進行加工處理的過程。因此,要設(shè)計出一個結(jié)構(gòu)好效率高的程序,必須研究數(shù)據(jù)的特性及數(shù)據(jù)間的相互關(guān)系及其對應(yīng)的存儲表示,并利用這些特性和關(guān)系設(shè)計出相應(yīng)的算法和程序。

  數(shù)據(jù)結(jié)構(gòu)和算法并不是一門教你編程的課,它們可以脫離任何的計算機程序設(shè)計語言,而只需要從抽象意義上去概括描述。說的簡單一點,數(shù)據(jù)結(jié)構(gòu)是一門告訴你數(shù)據(jù)在計算機里如何組織的課程,而算法是一門告訴你數(shù)據(jù)在計算機里如何運算的課程,前者是結(jié)構(gòu)學、后者是數(shù)學。程序設(shè)計就像蓋房子,數(shù)據(jù)結(jié)構(gòu)是磚、瓦,而算法則是設(shè)計圖紙。你若想蓋房子首先必須要有原材料(數(shù)據(jù)結(jié)構(gòu)),但這些原材料并不能自動地蓋起你想要的房子,你必須按照設(shè)計圖紙(算法)一磚一瓦地去砌,這樣你才能擁有你想要的房子。數(shù)據(jù)結(jié)構(gòu)是程序設(shè)計這座大廈的基礎(chǔ),沒有基礎(chǔ),無論設(shè)計有多么高明,這座大廈不可能建造起來。算法則是程序設(shè)計之靈魂,它是程序設(shè)計的思想所在,沒有靈魂沒有思想那不叫程序,只是一堆雜亂無章的符號而已。在程序設(shè)計中,數(shù)據(jù)結(jié)構(gòu)就像物質(zhì),而算法則是意識,這在哲學上可以理解為:意識是依賴與物質(zhì)而存在的,物質(zhì)是由意識而發(fā)展的。雙方相互依賴,缺一不可!

  2.寫程序的目的?

  目的是做數(shù)據(jù)處理,所有要能寫程序得有下面的這些素質(zhì)。

  根據(jù)業(yè)務(wù)需要,制定或編制解決問題的流程。編輯程序的人應(yīng)該是精通業(yè)務(wù)的人。

  編輯計算機程序的要求:

  1、 精通業(yè)務(wù)

  2、 精通計算機語言

  明確我們學習的內(nèi)容和方向:

  1、 解決問題的思路

  2、 計算機語言

  3、 思維方式的轉(zhuǎn)變

  編程的重點是解決問題的思路,而思路和計算機語言是沒有關(guān)系的。

  編程的難點是思維方式的轉(zhuǎn)變,我們需要站在計算機的角度去思考和描述問題。

  3.如何提升效率?

  提升數(shù)據(jù)存取的速度,切合實際數(shù)據(jù)結(jié)構(gòu)。

  最經(jīng)典的數(shù)據(jù)結(jié)構(gòu)是有限的,包括線性表、棧、隊列、串、數(shù)組、二叉樹、樹、圖、查找表等,而算法則是琳瑯滿目的,多種多樣的。就好像數(shù)據(jù)結(jié)構(gòu)是人體的各種組織、器官,算法則是人的思想。你可以用自己的思想去支配你的身體各個可以運動的器官隨意運動。如果你想吃蘋果,你可以削皮吃,可以帶皮吃,只要你愿意,甚至你可以不洗就吃。但無論如何,你的器官還是你的器官,就那么幾樣,目的只有一個就是吃蘋果,而方式卻是隨心所欲的!這就是算法的靈活性、不固定性。因此可以這樣說:數(shù)據(jù)結(jié)構(gòu)是死的,而算法是活的。

  二、找工作

  1.筆試題


  筆試題也經(jīng)常會考數(shù)據(jù)結(jié)構(gòu)的使用,大部分情況都是鏈表的合并和拆分,比如這個題就是鏈表的拆分。

  三、邏輯思維

  數(shù)據(jù)結(jié)構(gòu)和算法是一部發(fā)展史,發(fā)明他們就是為了“做出東西”,學習他們是為了不重復(fù)發(fā)明輪子,當你在“做東西”時遇到運行效率上的瓶頸,就可以參考這些前人的方案,當學完后,就能評估出一個“東西”以現(xiàn)在的技術(shù)是否可能做出來有人羅列xx結(jié)構(gòu)、xx算法能干嘛干嘛全是屁話,書上都有。說白了這東西就是前人的公式,學習就是為了套公式解決問題的,解決世界難題就要發(fā)明新公式(算法/結(jié)構(gòu))能否做出來包括兩點:效率是否能承受,功能是否能實現(xiàn)

  一些語言包裝了大量基礎(chǔ)算法,用于快速實現(xiàn)功能,一般效率也是可以接受的當效率不能接受,就需要調(diào)整算法和結(jié)構(gòu),c甚至匯編題主應(yīng)該是想做看得見摸得著的東西,所以應(yīng)該選擇抽象級別高的語言。先定這“東西”干嘛用的,拆分所有要實現(xiàn)的細節(jié),逐個完成,當它運作起來并快如預(yù)期,就做完了是否有必要深入學,和你在實現(xiàn)過程中的效率需求有關(guān)。

  四、學習方法

  各種結(jié)構(gòu)的思想很重要,無非就是每種結(jié)構(gòu)的增、刪、改、查,所有先的把每種結(jié)構(gòu)的圖示畫出來,也就是理解思想,再用圖形得到相應(yīng)的文字,最后再把文字翻譯成代碼。而不是一味的去追求代碼量,記住能復(fù)制粘貼就復(fù)制粘貼。所有學數(shù)據(jù)結(jié)構(gòu)就是學思想。

the end

評論(3)