怎麼學好數據結構?

137657283

最近在學習數據結構,雖然大學的時候,每個老師都說數據結構很重要。包括對我們找工作、代碼的邏輯性都起決定性作用。但最後還是沒有多少人學好了數據結構,包括我。所以代價就是,工作的時候又得抽時間重新來一遍。


入門學習數據結構時應主要是這兩個過程:

  • 選擇一本合適的書。(初學者應從C語言實現開始學習)
  • 編程實現和應用。(不斷的刷題、看課程、同時做實驗)


1.閱讀書籍

一定要看書,一定要看書。數據結構和語言不一樣,他不是鍛鍊我們編程能力,更多時候考察的是我們邏輯問題,也就是一種優化。


若果是純小白的話:建議去圖書館借一本大學的比較薄一些的教材《數據結構》,然後建議儘量快的往後學習。如果一個知識點實在不懂,就可以跳過,學習到後面與前面知識點聯繫起來,說不定你會覺得很簡單。



如果本來就有基礎的話,就可以選擇另一本比較經典的教材。這本書裡面使用的代碼,不是所謂的偽代碼,而是正經可以運行的C代碼,所以新人如果能照著做一遍下來,收穫應該不小。


2.在線視頻

數據結構有些問題是比較抽象的問題,所以當我們遇到不懂的部分的時候,如果有視頻通過動態的講解,能更好的幫助我們理解一個知識點。其次,現在網絡課程非常發達,其實網上的數據結構的課程也已經足夠我們理解、學習和分析了。

這裡我放幾個關於數據結構的課程:

(1) 小甲魚(https://www.bilibili.com/video/av2975983?from=search&seid=5449026242951100793)


(2)嚴蔚敏數據結構視頻教程(https://www.bilibili.com/video/av6239731?from=search&seid=5449026242951100793)

(3)中國大學MOOC

每個學期都會定期開課,但是開課的時間不固定,並且有期限。所以一旦跟了哪個老師,就一定要堅持下來,慢慢學完。

3.實現與應用

每學習完一個部分,都要嘗試著不看書,寫出來。這樣子學過的東西才能真正變成自己的東西。這裡我推薦一個實驗課程,實驗不多,但也能鍛鍊我們的動手能力。

實驗樓數據結構實驗(https://www.shiyanlou.com/courses/20)



路人甲M

2、詳細研究棧、哈希表(字典)。棧這個東西在計算機中處處能見到,理解了棧對於理解計算機本身很有好處,記得嘗試用棧的觀點來看計算機。字典就不說了,我想絕大多數的人都查過字典,應該知道字典有什麼用,想象一下沒有字典的話,從成千上萬個字中找到你想要的時有多痛苦。3、完全弄明白時間複雜度、空間複雜度是怎麼回事。理解這一點可以讓你自己在寫代碼時不至於寫出有明顯效率問題的代碼,默默的提高你的代碼質量。4、上手實際項目,積累項目經驗,看看項目哪裡用到了你所知道的數據結構和算法,搞清楚為什麼用,能不能用另一種數據結構或算法讓它變得更好。5、一兩年過後回頭再翻數據結構和算法的經典書籍,看看那些你曾經粗讀過的內容,我想你會看得很愉快的。最後,記得手邊常備一本講數據結構和算法的書,方便你想到時當手冊查查,我個人推薦《大話數據結構》

愛電腦的金良哥

個人經驗學習很多計算機基礎課都建議遵從這一點,先抓主幹知識,解決主要矛盾

在數據結構領域,要先把精力花在各個數據結構的特點(結構和何時使用上)

比如:

為什麼有了數組還要有鏈表 ?

樹結構比上述二者存儲數據上什麼不同?(插入刪除查找複雜度的權衡?)

為什麼在一般二叉搜索樹的基礎上又要有各種平衡二叉搜索樹,他們之間有什麼不同?

堆用在什麼場景下存數據?哈希表用在什麼場景?

瞭解這些數據結構產生的原因和使用的場景,自然也就需要知道他們的結構以及最重要的他們的插入、刪除、查找的時間複雜度是什麼,代價是什麼(比如更多的空間),能帶來的特殊性是什麼(比如堆O(1)時間獲取最大值/最小值)?

在瞭解了數據結構的特點之後,建議先學習在你熟悉的那門語言中怎麼使用它。

比如C++ vector, list, stack, queue, set, map, unordered_set, unordered_map, priority_queue 底層都是什麼數據結構,在什麼場景下使用,怎樣使用?配合著做一些題目,也就掌握了。

先抓主幹知識的含義就是不要一上來就鑽研在比如一個紅黑樹左旋右旋的細節或者各種各樣哈希函數的細節或者快排到底有多少種優化(很多國內數據結構課程在這上面花很大的功夫)。這不是說他們不重要,而是需要在主幹建立起來之後,在根據自己的需要豐富細節。一開始就鑽在細節裡,很可能會造成學得雲裡霧裡...學完了也不知道這門課到底是要幹嘛的...


HakunaMatata04

強推浙大劉越還有清華鄧俊輝的公開課。學時候配套看劉越的數據結構課本看完做配套的習題集。然後買數據結構和算法分析那本黑書或者算法第四版。一般高校發的那本清華出版的書反而不推薦,感覺入門晦澀難懂。開始提升興趣可以看看大話數據結構。最後可以買一些算法競賽的習題集做練習。


前進中的程序員

俗話說師傅領進門,修行靠個人,所以首先得有個師傅才行,讀了大學你會發現講的好的老師和講的差的老師,真是差別太大了,所以很多東西並不是它本身很難,而是很多人壓根自己就沒學懂,難道你還能指望他講明白,講的通俗易懂,怎麼可能?

推薦中國大學mooc上浙江大學的那門《數據結構》公開課,包你滿意,正好3月份才開課,聽聽課,刷刷題,一代大神也許就這樣誕生了。


遊戲小宅

首先你需要掌握一門語言,不需要太深,會用就行,因為你需要動手去實現它們,初學者還是建議學習C語言

在學習的過程中在理解概念的前提下,一定要多動手敲代碼,加深印象,深刻理解

最後可以看一些書籍輔助理解


趣談編程

數據機構和算法是密切相關的吧!

所以,個人感覺,還是要依託一種具體的語言,通過代碼來實現以下會比較好,純粹理論的東西沒什麼用,學習的目的還是在於運用!


碼農傳奇

數據結構個人覺得是計算機專業課中最難的,有些時候你看人家的操作算法設計,你也理解,但為啥自己弄不出來,還是學的少,看我發的視頻吧,還會有斯坦福大學的算法,最近一段時間發,加油吧!


分享到:


相關文章: