天天看點

五分鐘學程式設計:怎麼學資料結構

原創聲明

本文首發于微信公衆号【程式員黃小斜】

本文作者:黃小斜

轉載請務必在文章開頭注明出處和作者。

簡介

學習程式設計,資料結構是你必須要掌握的基礎知識,那麼資料結構到底是什麼呢?

根據百度百科的介紹,資料結構是計算機存儲、組織資料的方式。資料結構是指互相之間存在一種或多種特定關系的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的運作或者存儲效率。資料結構往往同高效的檢索算法和索引技術有關。

聽聽這是人話麼,我幫你們翻譯一下,其實資料結構就是用來描述計算機裡存儲資料的一種數學模型,因為計算機裡要存儲很多亂七八糟的資料,是以也需要不同的資料結構來描述。

本文思維導圖

五分鐘學程式設計:怎麼學資料結構

為什麼要學資料結構

了解了基本概念之後,接下來我們再來看看,為什麼我們要學習資料結構呢?

在許多類型的程式的設計中,資料結構的選擇是一個基本的設計考慮因素。許多大型系統的構造經驗表明,系統實作的困難程度和系統構造的品質都嚴重的依賴于是否選擇了最優的資料結構。

許多時候,确定了資料結構後,算法就容易得到了。有些時候事情也會反過來,我們根據特定算法來選擇資料結構與之适應。不論哪種情況,選擇合适的資料結構都是非常重要的。

選擇了資料結構,算法也随之确定,是資料而不是算法是系統構造的關鍵因素。這種洞見導緻了許多種軟體設計方法和程式設計語言的出現,面向對象的程式設計語言就是其中之一。

也就是說,標明資料結構往往是解決問題的核心,比如我們做一道算法題,往往就要先确定資料結構,再根據這個資料結構去思考怎麼解題。

如果沒有資料結構的基礎知識,也就沒有談算法的意義了,很多時候即使你會使用一些封裝好的程式設計api,但你卻不知道其背後的實作原理,比如hashmap,linkedlist這些Java裡的集合類,實際上都是JDK封裝好的基礎資料結構。

如何學習資料結構

第一次接觸

我第一次接觸資料結構這門課還是4年前,那這時候我在準備考研,專業課考的就是資料結構與算法,作為一個非科班的小白,對這個東西可以說是一竅不通。

這個時候的我隻有一點點c語言的基礎,基本上可以忽略不計,是以小白同學也可以按照這個思路進行學習。

資料結構基本上是考研的必考科目,是以我一開始使用的是考研的複習書籍,《天勤資料結構》和《王道資料結構》這兩個家的書都是專門為計算機考研服務的,可以直接百度,這兩本書對于我這種小白來說居然都是可以看懂的,是以,用來入門也是ok的。

入門學習階段

最早的時候我并沒有直接看書,而是先打算先看視訊,因為視訊更好了解呀,找視訊的辦法就是百度,于是當時找到的最好資源就是《郝斌的資料結構》這個視訊應該是很早之前錄制的了,但是對于小白來說是夠用的,特别基礎,講的很仔細。

從最開始的數組、線性表,再講到棧和隊列,以及後面更複雜的二叉樹、圖、哈希表,大概有幾十個視訊,那個時候正值暑假,我按照每天一個視訊的進度看完了,看的時候還得時不時地實踐一下,更有助于了解。

看完了這個系列的視訊之後,我又轉戰開始啃書了,視訊裡講的都是資料結構的基礎,而書上除了基礎之外,還有一些算法題目,比如你學完了線性表和連結清單之後,書上就會有相關的算法題,比如數組的元素置換,連結清單的逆置等等,這些在日後看來很容易的題目,當時把我難哭了。

好在大部分題目是有講解的,看完講解之後還能安撫一下我受傷的心靈。

記住這本書,我在考研之前翻了至少有三四遍。

強化學習階段

完成了第一波視訊+書籍的學習之後,我們應該已經對資料結構有了初步的了解了,對一些簡單的資料結構算法也應該有所了解了,比如棧的入棧和出棧,隊列的進隊和出隊,二叉樹的先序周遊和後續周遊、層次周遊,圖的最短路徑算法,深度優先周遊等等。

有了一定的基礎之後,我們需要對哪方面進行強化學習呢?

那就要看你學習資料結構的目的是什麼了,比如你學習資料結構是為了能做算法題,那麼接下來你應該重點去學習算法方面的知識,後續我們也将有一篇新的文章來講怎麼學習算法,敬請期待。

當然,我當時主要是複習考研,是以還是針對專業課的曆年真題來複習,像我們的卷子中就考察了很多關于哈希表、最短路徑算法、KMP算法、赫夫曼算法以及最短路徑算法的應用。

對于考卷上的一些知識點,我覺得掌握的并不是很好,于是又買了《王道資料結構》以及一些并沒有什麼卵用的書回來看,再次強化了基礎。

并且,由于我們的複試通常會考察一些比較經典的算法問題,是以我又花了很多時間去學習這些算法題,這些題目并非資料結構的基礎算法,是以在之前的書和視訊中可能找不到答案。

于是我又在網上搜到了另一個系列視訊《小甲魚的資料結構視訊》裡面除了講解資料結構之外,還講解了更多經典的算法題,比如八皇後問題,漢諾塔問題,馬踏棋盤,旅行商問題等,這些問題對于新手來說真的是很頭大的,使用視訊學習确實效果更佳。

實踐階段

紙上得來終覺淺,絕知此事要躬行。

衆所周知,算法題和數學題一樣,需要多加練習,而且考研的時候必須要手寫算法,于是我就經常在紙上寫(抄)算法,你還别說,就算是抄,多抄幾次也有助于了解。

很多基礎的算法,比如層次周遊,深度優先周遊和廣度優先周遊,多寫幾遍更有助了解,再比如稍微複雜一點的迪傑斯特拉算法,不多寫幾遍你可真記不住。

除了在紙上寫之外,更好的辦法自然是在電腦上敲了,寫Java的使用Java寫,寫C++ 的用C++ 寫,總之用自己擅長的語言實作就好,尴尬的是我當時隻會c,是以就隻好老老實實地用devc++寫簡單的c語言程式了。

至此,我們也算是學會了資料結構的基礎知識了,至少知道每個資料結構的特性,會寫常見的資料結構算法,甚至偶爾還能掏出一個八皇後出來。

推薦資源

書籍

《天勤資料結構》

《王道資料結構》

如果你要考研的話,這兩本書可不要錯過

嚴蔚敏《資料結構C語言版》

這本書是大學大學計算機專業常用的教科書,年代久遠,可以看看,官方也有配套的教學視訊

《大話資料結構》

官方教材大家都懂的,比較不接地氣,這本書對于很多新手來說是更适合入門的書籍。

《資料結構與算法Java版》

如果你是學Java的,想有一本Java語言描述的資料結構書籍,可以試試這本,但是這本書顯然比較複雜,不适合入門使用。

視訊

《郝斌資料結構》

這個視訊上文有提到過,年代比較久遠,但是入門足夠了。

《小甲魚資料結構與算法》

這個視訊比較新,更加全面,有很多關于經典算法的教程,作者也入駐了B站,有興趣也可以到B站看他的視訊。

總結

關于資料結構的學習,我們就講到這裡了,如果還有什麼疑問也可以到我公衆号裡找我探讨,雖然我們提到了算法,但是這裡隻關注一些基礎的資料結構算法,後續會有關于“怎麼學算法“的文章推出,敬請期待。

對了,你想問我文章裡提到的書籍和視訊去哪找?我已經給你準備好了

以上資源都可以免費領取,在我的公衆号【程式員黃小斜】回複“資料結構”即可免費領取對應的資料

寫在最後

如果覺得本文對你有幫助的話,請你也不要吝啬你的“好看”哈,轉發朋友圈就是對我最大的支援啦,你們的支援是對我最大的鼓勵。

對本系列文章有什麼建議和意見,也歡迎留言告訴我,期待你的回饋。另外本系列文章也會制作成相應的視訊放到B站,趕緊來B站關注我吧。

微信公衆号:程式員黃小斜
知乎:黃小斜
B站:黃小斜
           

最後再送個福利,關注公衆号「程式員黃小斜」

回複【2019】,送我整理一年的3T技術學習資料,包含各大技術方向,從入門到進階。

回複【PDF】,送你《全網最火的Java程式員面試寶典》(263頁)

回複【書單】,送你《Java工程師必備書單》電子書合集

回複【架構師】,送你一套Java架構師視訊教程,程式員進階必備。

回複【校招】,送你程式員校招必備的視訊資料,包括算法刷題、項目課、面試課等内容。