學(xué)會(huì)數(shù)據(jù)結(jié)構(gòu);導(dǎo)學(xué)階段。 最初并沒(méi)有直接看書(shū),而是先打算先看視頻,因?yàn)橐曨l比較好理解啊,找視頻的方法就是百度,所以當(dāng)時(shí)找到的最好資源就是開(kāi)課吧的教程,但對(duì)小白來(lái)說(shuō)還是夠的,特別基礎(chǔ),講得非常仔細(xì)。 這是一個(gè)很好的例子,從最開(kāi)始的陣列、線(xiàn)性表,到后面的棧和隊(duì)列,再到更復(fù)雜的二叉樹(shù)、圖表、散列表,大概有幾十個(gè)視頻,那時(shí)是暑假,我按照每天一個(gè)視頻的進(jìn)度來(lái)看,看的時(shí)候還是要不時(shí)練習(xí),這樣對(duì)理解會(huì)更有幫助。 讀過(guò)這個(gè)系列的視頻后,我又轉(zhuǎn)而開(kāi)始啃書(shū),視頻中講的都是數(shù)據(jù)結(jié)構(gòu)的基本知識(shí),而書(shū)中除了基本知識(shí)外,還有一些算法問(wèn)題,比如,你學(xué)習(xí)了線(xiàn)性表和鏈表之后,書(shū)中就會(huì)有相關(guān)的算法問(wèn)題,例如數(shù)組的元素替換,鏈表的倒置等,
加強(qiáng)學(xué)習(xí)階段 在學(xué)習(xí)完第一個(gè)視頻+書(shū)本后,我們應(yīng)該已經(jīng)對(duì)數(shù)據(jù)結(jié)構(gòu)有了初步的了解,對(duì)一些簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)算法也應(yīng)該有所了解,例如數(shù)據(jù)棧的入棧和出棧,隊(duì)列的進(jìn)組和出組,二叉樹(shù)的先序遍歷和后續(xù)遍歷,層次遍歷,圖的最短路徑算法,深度優(yōu)先遍歷等等。 具備一定的基礎(chǔ)后,我們需要從哪些方面加強(qiáng)學(xué)習(xí)呢? 這要看你學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的目的是什么了,比如你學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是為了做算法題,那么你就應(yīng)該把重點(diǎn)放在學(xué)習(xí)算法上,后面我們還會(huì)有一篇關(guān)于如何學(xué)習(xí)算法的文章,敬請(qǐng)關(guān)注。 當(dāng)然,當(dāng)時(shí)我主要是復(fù)習(xí)考研,所以還是以專(zhuān)業(yè)課歷年真題為主,像我們的卷子里就有很多關(guān)于哈希表,最短路徑算法,KMP算法,Huffman算法和最短路徑算法的應(yīng)用。 對(duì)試卷上的一些知識(shí)點(diǎn),我覺(jué)得掌握得不太好,就買(mǎi)了《王道數(shù)據(jù)結(jié)構(gòu)》和一些沒(méi)啥卵用的書(shū)回來(lái)看,再次強(qiáng)化了基礎(chǔ)。 而且,由于我們的復(fù)考通常是對(duì)一些比較經(jīng)典的算法問(wèn)題進(jìn)行考察,所以我又花了大量的時(shí)間來(lái)學(xué)習(xí)這些算法題,而這些并不是數(shù)據(jù)結(jié)構(gòu)的基本算法,所以可能無(wú)法在以前的書(shū)籍和視頻中找到答案。 所以我又在網(wǎng)上搜到了另一個(gè)系列的視頻“小甲魚(yú)的數(shù)據(jù)結(jié)構(gòu)視頻”,里面除了講解數(shù)據(jù)結(jié)構(gòu)外,還講解了更多的經(jīng)典算法題目,比如八皇后問(wèn)題、漢諾塔問(wèn)題、馬踏棋問(wèn)題、商旅問(wèn)題等等,這些對(duì)于初學(xué)者來(lái)說(shuō)真的是很難的,通過(guò)視頻學(xué)習(xí)效果更好。 實(shí)習(xí)階段 紙上談兵終覺(jué)淺薄,絕知此事要躬身。大家都知道,算法題和數(shù)學(xué)題一樣,需要多加練習(xí),而且考研時(shí)還要手寫(xiě)算法,所以我經(jīng)常在紙上寫(xiě)(抄)算法,別說(shuō)你,就是抄,多抄幾遍也有助于理解。 有許多基本算法,如層次遍歷、深度優(yōu)先遍歷、廣度優(yōu)先遍歷、多寫(xiě)一些遍歷,以及稍微復(fù)雜一些的Dejerstra算法等,如果不多寫(xiě)一些遍歷,你真的記不住。 當(dāng)然,除了寫(xiě)在紙上,更好的方法是在電腦上敲鍵盤(pán),寫(xiě)Java用Java,寫(xiě)C++用C++寫(xiě),總之,就是用自己擅長(zhǎng)的語(yǔ)言實(shí)現(xiàn),尷尬的是,我當(dāng)時(shí)只會(huì)寫(xiě)c,所以只能老老實(shí)實(shí)用devc++編寫(xiě)簡(jiǎn)單的c語(yǔ)言程序。 此時(shí),我們也算是學(xué)到了數(shù)據(jù)結(jié)構(gòu)的基本知識(shí),至少了解了每一種數(shù)據(jù)結(jié)構(gòu)的特征,會(huì)寫(xiě)通用的數(shù)據(jù)結(jié)構(gòu)算法。 推薦資源 書(shū)籍。 如果你正準(zhǔn)備考研,那么“天勤數(shù)據(jù)結(jié)構(gòu)”“王道數(shù)據(jù)結(jié)構(gòu)”這兩本書(shū)可別錯(cuò)過(guò)。 嚴(yán)蔚敏《數(shù)據(jù)結(jié)構(gòu)與C語(yǔ)言版本》是一本大學(xué)本科計(jì)算機(jī)專(zhuān)業(yè)常用的教材,可查閱,官方也有配套教學(xué)錄像。 《大話(huà)數(shù)據(jù)結(jié)構(gòu)》官方教材大家都懂,比較不接地氣,這本書(shū)對(duì)很多新手來(lái)說(shuō)是比較適合入門(mén)的。 如果你是學(xué)Java的,并且想要一本Java語(yǔ)言描述的數(shù)據(jù)結(jié)構(gòu)方面的書(shū),你可以試試這本,但是這本書(shū)明顯比較復(fù)雜,而且不適合作為入門(mén)。 |
|
|
來(lái)自: 碼農(nóng)9527 > 《C++》