數據結構與算法——編程思想的核心,學生的噩夢

前幾天,營子裏有同學在抱怨數據結構與算法這門課難學,使我不禁想到了大學時學這門課痛苦不堪的心情,以及工作後的某一天對其作用茅塞頓開的情景。其實,數據結構與算法所傳遞的內容,正是編程思想(請參考我的筆記《編程初學者,要學好面向對象編程思想》)的根基。編程的思考過程非常像做菜,如果你有下

廚房的經驗,可以試着想像你要露一手,做一道“宮保雞丁”。編程就像做菜

首先,當你打算去做“宮保雞丁”的時候,實際上是建立了一個目標、一個待解決的問題、一個問題空間……這對應了你要編的一個程序(比如給自己做一個能夠分組的通訊錄)。目標一旦確定,人腦會自動的去搜索相關的材料,開始思考做“宮保雞丁”都需要哪些主料、輔料。雞胸肉自然是主料,蔥、花生米,糖、醋、醬油、鹽、味精……這些是輔料,把這些東西統統準備好,之後“配菜”,配菜的過程要將雞胸肉切丁,蔥切段,各種調料調配均衡。從準備材料到配菜的整個過程,就是數據結構要考慮的問題。當你面對了一個要做的程序,首先也要考慮的就是程序問題空間模型如何用計算機數據模型來表示,也就是用什麼樣的數據(對象)來表示現實問題中的事物,比如還是剛纔提到的“通訊錄”的程序,一條通訊錄聯繫人的記錄需要包含姓名、年齡、性別等信息,你就必須思考用什麼類型的數據去表示他們,從這個意義上說,學每種編程語言時(如C、C++、Java等)提到的基本數據類型,可以被視作是最簡單的數據結構。當你去思考通訊錄的分組功能時,自然會想到每條聯繫人之間和組之間的關係,那麼“樹”這個結構就應該會出現在你的腦海裏。

作爲編程思想的核心,考慮數據結構問題其實就是思考如何選用數據(對象)以及組織這些數據來表示現實問題,所以應該結合現實問題去學去思考,無奈學校課本理論太強,若老師又不能很好的結合實際問題去講,那些線性表呀、鏈表呀、樹呀、圖呀的,一準兒把學生搞蒙。

這個宮保雞丁還沒做完,繼續。當料備好,就要準備下鍋了。是先放肉還是先放蔥?多大火候?蓋蓋兒燜還是大火爆?……步驟和方法不同,同樣的料炒出來的火候和味道也不同,這就是算法。算法需要思考的是如何處理數據(對象),使程序更加符合邏輯,更加高效。

個人認爲,數據結構應該優先去學習,算法次之,理由是把雞肉準備成了鴨肉就變成“宮保鴨丁”了,沒可能把程序寫好。

學好數據結構,就要訓練自己時常用數據(對象)去表示現實問題,可以先從最簡單的基本數據類型開始練習:數值類型如整型,字符串類型,布爾類型(很多語言沒有這個類型,但是通過零和非零可以表示出來)這三種是我總結的最常用的三種基本數據類型(我這裏的“基本數據類型”是從概念上的,而非具體語言,因爲多數語言的基本數據類型中並沒有字符串)。初學編程,像性別這樣的現實問題,會很容易就使用了字符(串)類型來表示,使數據佔用計算機內存空間變大(如果用布爾類型只需要一個字節),程序處理起來也麻煩,所以合理的選用數據(對象)類型去表示現實問題是基本功,此刻你看到這篇筆記的頁面充滿了無數的數據,你可以嘗試思考思考。

另外,如果感興趣,可以留個小題目給大家思考,問題是這樣的:

需要用數據來表示一注足球彩票,足球彩票的規則如下:足球彩票

1、一共預測14場比賽的結果(勝、負、平)

2、如果主場球隊勝利則用3表示,兩隊打平用1表示,主場球隊失利用0表示

3、這樣,一注彩票會是這個樣子,例如“33110103003133”

要求,用合適的數據(結構)來表示一注彩票,讓所佔計算機內存空間儘可能小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章