本人是菜鳥,上了一學期的網課,感覺數據結構一點都沒學到,不知道是不是自己沒掌握學習技巧,還是邏輯不行。學習數據結構的時候看的很亂,然後很容易厭煩。有時是理論懂了,但是代碼又不會實現。既然選了這專業也不想放棄。馬上下學期就要進入完全學演算法了,希望大佬能給我指點迷津 ?


新浪微博搜陳越姥姥的《數據結構自學攻略》


以下內容信息量比較大,建議收藏!

首先要知道 數據結構和演算法 都有哪些內容, 這張圖應該對你有幫助。畢竟以後也是為了面試做準備。

當開始入門的時候,要循序漸進的來,我這裡可以建議一個學習順序。

可以按照如下順序來循序漸進的學習。

數據結構方面:

  1. 數組和鏈表, 這是最基礎數據結構,數組和鏈表在內存中的分配方式,應用場景,已經基本代碼一定要熟練。
  2. 哈希表, 什麼是符號表,如何做映射也就是哈希函數,衝突了怎麼辦就要看哈希碰撞。 然後在了解set 和 map這兩種數據結構
  3. 字元串,字元串其實就是數組,但是字元串也有很多自己的特性,例如C語言中字元串是以『 』結尾的。同時字元串查找方面有一個經典演算法KMP(當然這個比較難,可以放在後面在看)
  4. 棧與隊列,一個 先進先出,一個先進後出,不要僅僅知道概念,要知道有什麼用,棧在括弧匹配已經模擬遞歸方面很有大優勢,隊列在圖中的廣度優先搜索中有所應用。可以用棧實現隊列,也可以用隊列實現棧。更進一步還有單調隊列,優先順序隊列。
  5. 樹,其實的二叉樹在計算機科學中應用非常廣泛, 了解平衡二叉樹,完全二叉樹等等都有哪些特性,前中後序遍歷 要熟練寫出來,此時你就會接觸到兩個演算法叫做遞歸和回溯。

演算法方面:

  1. 排序演算法,十大排序演算法,都要了解,各自優缺點,插入,冒泡,快速排序一定要可以熟練到直接寫出來 做到bugfree。
  2. 貪心演算法,這個是一種思想,通過目前最優值推斷出整體最優質
  3. 動態規劃,最經典是背包問題,背包里就有九種背包問題,主要掌握前三種就可以了。動態規劃是演算法中的明珠,最能體現演算法思想,一定要好好學,後面無論在面試還是找工作都會受益的。
  4. 圖論,深度優先和廣度優先遍歷,一定要熟練。Dijkstra,spfa,貝爾曼福德,最小生成樹等這些演算法要知道其思想

複雜數據結構

這些高級數據結構,可以最後再看,也是一定要會的。 不要求上來就手撕代碼,但要知道原理已經應用

  1. 並查集
  2. 線段樹
  3. 樹狀數組
  4. 字典樹
  5. B、B+、B-樹

相信很多小夥伴刷題的時候面對力扣上近兩千道題目,感覺無從下手,我花費半年時間整理了Github項目:

leetcode刷題攻略?

github.com

裡面有200道經典演算法題目刷題順序、配有60w字的詳細圖解,常用演算法模板總結,以及難點視頻講解,按照list一道一道刷就可以了!star支持一波吧!

可以在B站上關注我的視頻

嗶哩嗶哩 ( ゜- ゜)つロ 乾杯~ Bilibili?

space.bilibili.com

另外我已經將「代碼隨想錄」的演算法文章按照由淺入深的刷題順序編排起來,整理成冊,陸續整理出PDF版本了

先上圖:

趕緊去下載看看,你會發現相見恨晚!

BAT程序員的演算法學習手冊開放下載!?

mp.weixin.qq.com

如果感覺對你有幫助,要不吝嗇給個贊吧!

更多乾貨,關注 @代碼隨想錄


https://visualgo.net/zh?

visualgo.net

自學起家的,剛開始學數據結構時我也很迷茫。首先大致弄懂實現原理。實現原理懂但寫不出代碼,說明還沒有適應寫代碼。這個階段還是要多練習。

我已開始也這樣,後來我就抄,背,默寫代碼。鏈表的isEmpty簡單吧,一行背下來;接著是查找,幾行背下來;最後插入,抄一遍,仔細看一遍,研究一次,最後背下來。

最後慢慢就手熟了。


leetcode,你值得擁有


看一些書吧,《趣學演算法》《劍指offer》《大話數據結構》……或者刷leetcode,實在不行跟著我公眾號學也行


不要糾結與代碼的編寫。

各種數據結構(鏈表、二叉樹等):先把各種數據結構以及插入、刪除等各種操作搞懂。要能夠自己畫圖模擬出各種結構的刪除、插入、刪除等一些操作。

各種演算法:同鏈表、二叉樹等的學習,多畫圖、模擬排序的過程。

最後寫代碼是照著圖寫就行了。如果跑錯了,一定要慢慢調試。

最後如果想提高寫數據結構代碼的逼格,看看stl源碼。


推薦閱讀:
相关文章