題主應該先釐清兩個概念:編程語言和數據結構。

  1. 數據結構的本質是一種思維,它的目標是將現實世界中各種各樣的數據放入到內存中,在內存中操作這些數據,並儘可能優化這些存儲方案和操作方法。

  2. 編程語言是將數據結構這種思維實現出來的一種工具。

而學習數據結構最重要的就是邊學邊做,只學習書上的思維方法不用編程語言寫出來的話,效率將非常低下,就好比學習數據只看例題不做題,其實往往收穫甚微。既然要邊學習邊實踐,那麼在學習數據結構之前,掌握一些基礎的編程知識是很有必要的。


這裡把個人的一些經驗分享給題主。

零、快速學習基礎C語言

前面說道,在學習數據結構之前,應該掌握一定的編程知識,但是不必精通某個語言,知道基本語法即可。題主可以去中國大學MOOC,或者網易雲課堂上,找一個自己喜歡的課程,跟著視頻把基礎的語言過一遍,這裡推薦浙江大學翁凱老師的C語言課程。鏈接:https://mooc.study.163.com/course/1000002011?tid=2001530003#/info

一、記住演算法思想(是什麼)

這一部分的目標是,你能給人說明白,什麼是」堆棧「,什麼是」平衡二叉樹「等。題主應當形成長久記憶,存儲到你的」硬碟「里,而不僅僅在學習的時候過了一遍你的」內存「。

第一步,記住數據結構最直觀的東西。這種直觀的記憶會在不知不覺中就完成,但為了更好的記住,還需去刻意記憶和偶爾的複習。

第二步,記憶該數據結構的定義與性質與特點等。例如,學習哈夫曼樹的時候。哈夫曼樹的定義:WPL(帶權路徑長度)最小的二叉樹;哈夫曼樹的特點:(1)沒有度為1的結點(2)n個葉子結點的哈夫曼樹共有2n-1個結點(3)哈夫曼樹的任意非葉節點的左右子樹交換後仍是哈夫曼樹。關於」數據結構「,需要記憶的內容也需要自己在其中慢慢領悟。

二、進行大量相關編程練習,用編程語言去實現某一數據結構上的演算法(怎麼辦)

必須承認,理解一個演算法很容易,很容易在紙上去模擬一個演算法的實現過程。但,具體實現,則是另一回事。一定得先自己思考,然後再去看書中給的編程語言實現。在我看來,這一過程已經不屬於「數據結構與演算法」的內容了。而是你綜合素質的體現,如何真正理解問題和用編程技巧實現,很考驗自己。

三、」記住「特定情景下,利用某一特定的數據結構,去解決問題 (為什麼+怎麼辦)

每介紹一種數據結構,浙大數據結構與演算法的MOOC課程都會有一個實際問題來作為「引子」,回答了「這種數據結構為什麼會出現」。有的是為了實現特定的操作,有的是為了時間和空間上(大部分考慮的是時間複雜性)效率的更高。這些東西,我們也須理解記憶。

最終,希望題主能自己根據自己的理解,針對某個問題,熟練的給出下圖這樣的解決方案,我認為就算是入門了。


學數據結構需要懂一門語言實踐,不一定非的是c語言,另外c語言內容不多,你不需要把c++也學了,再看下就行了


建議重新學習C語言,學習C語言或者是數據結構,建議看視頻的方式來進行學習,很多知識點通過視頻的方式講解的會更加清楚,比如說數據結構中的鏈表的增加和刪除,如果通過一些動畫的演示,會更容易懂。

學習C語言的過程中,兩個重要知識點是需要特別的關注的,指針和結構體,把這兩方面的知識熟練應用了,再去看數據結構會更容易理解。

先把C語言的基礎夯實,在學習數據結構。學習C語言的時候,看的是「如鵬網」的《C語言也能幹大事》視頻教程,通過開發超級瑪麗,吃金幣,飛機大戰等經典小遊戲以及用C語言來開發網站等來講解C語言的基礎知識點,沒想到C語言還可以這麼學,


個人覺得語言只是一個載體,數據結構、演算法是永恆的理論,c語言沒學好沒關係,如果你後續選擇c++/java 等其它語言,同樣會遇到數據結構和演算法,那你就用你熟悉的語言去實現這些數據結構和演算法。

興趣永遠是最好的老師,不要為了學而學。

答題不易,歡迎關注我,多多交流~


c語言沒學會,建議在重學一下,主要是指針的應用,指針就是地址的操作,然後自己寫寫快速希爾冒泡歸併排序,在寫寫二分法查找,就大概理解c語言了,然後學習使用結構體和指針理解數據結構


推薦閱讀:
相关文章