數(shù)據(jù)結(jié)構(gòu)的作用及學(xué)習(xí)方法
一、項(xiàng)目開發(fā)
1.程序設(shè)計(jì)的本質(zhì)?
程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法
數(shù)據(jù)是計(jì)算機(jī)化的信息,它是計(jì)算機(jī)可以直接處理的最基本和最重要的對象。無論是進(jìn)行科學(xué)計(jì)算或數(shù)據(jù)處理、過程控制以及對文件的存儲(chǔ)和檢索及數(shù)據(jù)庫技術(shù)應(yīng)用等,都是對數(shù)據(jù)進(jìn)行加工處理的過程。因此,要設(shè)計(jì)出一個(gè)結(jié)構(gòu)好效率高的程序,必須研究數(shù)據(jù)的特性及數(shù)據(jù)間的相互關(guān)系及其對應(yīng)的存儲(chǔ)表示,并利用這些特性和關(guān)系設(shè)計(jì)出相應(yīng)的算法和程序。
數(shù)據(jù)結(jié)構(gòu)和算法并不是一門教你編程的課,它們可以脫離任何的計(jì)算機(jī)程序設(shè)計(jì)語言,而只需要從抽象意義上去概括描述。說的簡單一點(diǎn),數(shù)據(jù)結(jié)構(gòu)是一門告訴你數(shù)據(jù)在計(jì)算機(jī)里如何組織的課程,而算法是一門告訴你數(shù)據(jù)在計(jì)算機(jī)里如何運(yùn)算的課程,前者是結(jié)構(gòu)學(xué)、后者是數(shù)學(xué)。程序設(shè)計(jì)就像蓋房子,數(shù)據(jù)結(jié)構(gòu)是磚、瓦,而算法則是設(shè)計(jì)圖紙。你若想蓋房子首先必須要有原材料(數(shù)據(jù)結(jié)構(gòu)),但這些原材料并不能自動(dòng)地蓋起你想要的房子,你必須按照設(shè)計(jì)圖紙(算法)一磚一瓦地去砌,這樣你才能擁有你想要的房子。數(shù)據(jù)結(jié)構(gòu)是程序設(shè)計(jì)這座大廈的基礎(chǔ),沒有基礎(chǔ),無論設(shè)計(jì)有多么高明,這座大廈不可能建造起來。算法則是程序設(shè)計(jì)之靈魂,它是程序設(shè)計(jì)的思想所在,沒有靈魂沒有思想那不叫程序,只是一堆雜亂無章的符號(hào)而已。在程序設(shè)計(jì)中,數(shù)據(jù)結(jié)構(gòu)就像物質(zhì),而算法則是意識(shí),這在哲學(xué)上可以理解為:意識(shí)是依賴與物質(zhì)而存在的,物質(zhì)是由意識(shí)而發(fā)展的。雙方相互依賴,缺一不可!
2.寫程序的目的?
目的是做數(shù)據(jù)處理,所有要能寫程序得有下面的這些素質(zhì)。
根據(jù)業(yè)務(wù)需要,制定或編制解決問題的流程。編輯程序的人應(yīng)該是精通業(yè)務(wù)的人。
編輯計(jì)算機(jī)程序的要求:
1、 精通業(yè)務(wù)
2、 精通計(jì)算機(jī)語言
明確我們學(xué)習(xí)的內(nèi)容和方向:
1、 解決問題的思路
2、 計(jì)算機(jī)語言
3、 思維方式的轉(zhuǎn)變
編程的重點(diǎn)是解決問題的思路,而思路和計(jì)算機(jī)語言是沒有關(guān)系的。
編程的難點(diǎn)是思維方式的轉(zhuǎn)變,我們需要站在計(jì)算機(jī)的角度去思考和描述問題。
3.如何提升效率?
提升數(shù)據(jù)存取的速度,切合實(shí)際數(shù)據(jù)結(jié)構(gòu)。
最經(jīng)典的數(shù)據(jù)結(jié)構(gòu)是有限的,包括線性表、棧、隊(duì)列、串、數(shù)組、二叉樹、樹、圖、查找表等,而算法則是琳瑯滿目的,多種多樣的。就好像數(shù)據(jù)結(jié)構(gòu)是人體的各種組織、器官,算法則是人的思想。你可以用自己的思想去支配你的身體各個(gè)可以運(yùn)動(dòng)的器官隨意運(yùn)動(dòng)。如果你想吃蘋果,你可以削皮吃,可以帶皮吃,只要你愿意,甚至你可以不洗就吃。但無論如何,你的器官還是你的器官,就那么幾樣,目的只有一個(gè)就是吃蘋果,而方式卻是隨心所欲的!這就是算法的靈活性、不固定性。因此可以這樣說:數(shù)據(jù)結(jié)構(gòu)是死的,而算法是活的。
二、找工作
1.筆試題
筆試題也經(jīng)常會(huì)考數(shù)據(jù)結(jié)構(gòu)的使用,大部分情況都是鏈表的合并和拆分,比如這個(gè)題就是鏈表的拆分。
三、邏輯思維
數(shù)據(jù)結(jié)構(gòu)和算法是一部發(fā)展史,發(fā)明他們就是為了“做出東西”,學(xué)習(xí)他們是為了不重復(fù)發(fā)明輪子,當(dāng)你在“做東西”時(shí)遇到運(yùn)行效率上的瓶頸,就可以參考這些前人的方案,當(dāng)學(xué)完后,就能評(píng)估出一個(gè)“東西”以現(xiàn)在的技術(shù)是否可能做出來有人羅列xx結(jié)構(gòu)、xx算法能干嘛干嘛全是屁話,書上都有。說白了這東西就是前人的公式,學(xué)習(xí)就是為了套公式解決問題的,解決世界難題就要發(fā)明新公式(算法/結(jié)構(gòu))能否做出來包括兩點(diǎn):效率是否能承受,功能是否能實(shí)現(xiàn)
一些語言包裝了大量基礎(chǔ)算法,用于快速實(shí)現(xiàn)功能,一般效率也是可以接受的當(dāng)效率不能接受,就需要調(diào)整算法和結(jié)構(gòu),c甚至匯編題主應(yīng)該是想做看得見摸得著的東西,所以應(yīng)該選擇抽象級(jí)別高的語言。先定這“東西”干嘛用的,拆分所有要實(shí)現(xiàn)的細(xì)節(jié),逐個(gè)完成,當(dāng)它運(yùn)作起來并快如預(yù)期,就做完了是否有必要深入學(xué),和你在實(shí)現(xiàn)過程中的效率需求有關(guān)。
四、學(xué)習(xí)方法
各種結(jié)構(gòu)的思想很重要,無非就是每種結(jié)構(gòu)的增、刪、改、查,所有先的把每種結(jié)構(gòu)的圖示畫出來,也就是理解思想,再用圖形得到相應(yīng)的文字,最后再把文字翻譯成代碼。而不是一味的去追求代碼量,記住能復(fù)制粘貼就復(fù)制粘貼。所有學(xué)數(shù)據(jù)結(jié)構(gòu)就是學(xué)思想。
- 已贊