
*****
你是否曾跟我一樣,因為看不懂數據結構和算法,而一度懷疑是自己太笨?實際上,很多人在第一次接觸這門課時,都會有這種感覺,覺得數據結構和算法很抽象,晦澀難懂,宛如天書。正是這個原因,讓很多初學者對這門課望而卻步。
<br>我個人覺得,其實真正的原因是你沒有找到好的學習方法,沒有抓住學習的重點。實際上,數據結構和算法的東西并不多,常用的、基礎的知識點更是屈指可數。只要掌握了正確的學習方法,學起來并沒有看上去那么難,更不需要什么高智商、厚底子。
## 什么是數據結構?什么是算法?
大部分數據結構和算法教材,在開篇都會給這兩個概念下一個明確的定義。但是,這些定義都很抽象,對理解這兩個概念并沒有實質性的幫助,反倒會讓你陷入死摳定義的誤區。畢竟,我們現在學習,并不是為了考試,所以,概念背得再牢,不會用也就沒什么用。
<br>雖然我們說沒必要深挖嚴格的定義,但是這并不等于不需要理解概念。 下面我就從廣義和狹義兩個層面,來幫你理解數據結構與算法這兩個概念。
<br>從廣義上講,數據結構就是指一組數據的存儲結構。算法就是操作數據的一組方法。
<br>圖書館儲藏書籍你肯定見過吧?為了方便查找,圖書管理員一般會將書籍分門別類進行“存儲”。按照一定規律編號,就是書籍這種“數據”的存儲結構。
<br>那我們如何來查找一本書呢?有很多種辦法,你當然可以一本一本地找,也可以先根據書籍類別的編號,是人文,還是科學、計算機,來定位書架,然后再依次查找。籠統地說,這些查找方法都是算法。
<br>那數據結構和算法有什么關系呢?為什么大部分書都把這兩個東西放到一塊兒來講呢?
<br>這是因為,數據結構和算法是相輔相成的。數據結構是為算法服務的,算法要作用在特定的數據結構之上。 因此,我們無法孤立數據結構來講算法,也無法孤立算法來講數據結構。
<br>比如,因為數組具有隨機訪問的特點,常用的二分查找算法需要用數組來存儲數據。但如果我們選擇鏈表這種數據結構,二分查找算法就無法工作了,因為鏈表并不支持隨機訪問。
<br>數據結構是靜態的,它只是組織數據的一種方式。如果不在它的基礎上操作、構建算法,孤立存在的數據結構就是沒用的。
<br>下面我們來看看,究竟該怎么學數據結構與算法。
## 學習這個需要什么基礎?
看到數據結構和算法里的“算法”兩個字,很多人就會聯想到“數學”,覺得算法會涉及到很多深奧的數學知識。那我數學基礎不是很好,學起來會不會很吃力啊?
<br>數據結構和算法課程確實會涉及一些數學方面的推理、證明,尤其是在分析某個算法的時間、空間復雜度的時候,但是這個你完全不需要擔心。
<br>我會由淺入深,從概念到應用,一點一點給你解釋清楚。你只要有高中數學水平,就完全可以學習。