資料結構學習(C++)續——續篇後記

來源:互聯網
上載者:User

我覺得續篇的寫作我很不負責任,越到後面越是如此,可能是我沒有打算寫的緣故,或者說是“心浮氣躁”——寫了幾個月有點熬不住了,^_^。但也可能我只能寫到這樣,畢竟這部分離我們太遠,至少和前邊的“資料結構”相比是太遠。

有人說,尋找和排序的演算法已經非常成熟了,大師們窮盡腦汁也不可能帶來“質的飛躍”了,而像我們這些等著“吸收前人勞動果實”的人,能全盤吸收就甚為不易,更不要說“完成前人所未完成”了。因此,對於教科書上面的講解,除非作者治學態度有問題(信口開河),否則沒有什麼好講的。正像我前面所說的,我只是給大家讀書的時候起個嚮導的作用,並不是想寫本書,因此很多的地方都省略了。我所寫的,如果使得書上枯燥的數學分析具體化,各種方法的提出不再顯得突兀,我就心滿意足了。

對於排序,我還顯得有點耐性,除了錦標排序和基數排序、外部排序,其他的都給出了常式;對於尋找,除了順序尋找和折半、插值尋找,二叉搜尋樹,AVL樹,其他的都是說說而已。造成這種結果,固然是我耐性有限,但這也是現狀所致——什麼東西要是不帶個資料庫什麼的就顯得不夠專業,有了資料庫,B-樹什麼的還要它作甚?說這話的時候,我常常顯得很無奈,但確實是這種現狀的受益者。

最後,說說怎樣看待資料結構——談這個話題就是找罵,但到了最後了,我也不怕了。資料結構現在的地位很尷尬,幾乎每個有志於寫程式的人都把資料結構擺在必須掌握的知識的第一位,但實際上,當必修課學的、電腦專業的學生學完之後,一半茫茫然;而非電腦專業的,甚至沒學過資料結構的,程式員也幹得好好的。

電腦的應用能到今天的地步,資料結構功不可沒,沒有串、表、樹、圖,電腦只能在數值計算裡面打轉轉——現在掉過來了,真正的數值計算反倒沒有多少人會寫了,^_^。但,這和彙編(更有甚者是01代碼,我光知道90是NOP,^_^)的處境一樣,彙編也曾在電腦發展上的作用無可估量,而現在會的人真是寥寥無幾,就連C的境域也是如此,雖然每所大學不管是不是電腦專業都開設C語言課程。

可以說,我們寫的每個還算有點功能的程式,都離不開資料結構。比如我們當初學C的時候,都做過這樣的練習:將一組輸入的資料逆序輸出。我們每個人幾乎都能想到先拿數組存起來,然後倒著再輸出。我們在這裡其實就利用了線性表,只是我們沒意識到。再比如我們需要一段排序的程式,而在我們沒學過排序方法的時候,大多數人都會寫出直接選擇排序——不斷的在剩下的當中選出最大(小)的不就行了嗎?同樣的,我們也沒意識到這叫直接選擇排序。

在寫程式的過程中,我們都會不知不覺的運用到資料結構,即使沒學過,因為資料結構本來就是來自於實踐中的。這恰巧說明了為什麼沒學過資料結構的人照樣能當好程式員。然而這種自發的運用是有限度的,這取決於一個人的天分,我始終認為第一個想出漢諾塔遞迴解法的人真是天才。而現在漢諾塔成了每一個學過資料結構的人不願再費腦筋的問題“切,簡直不值一提”,真不知道當初他們對著那不過三四行的代碼發出了多少驚歎。人類能走到今天,文字(語言)、紙張、印刷術功不可沒,換句話說,就是知識的積累和傳播。站在巨人的肩膀才能看得更遠,學了資料結構,解決問題的能力才會更強。就比如我,以前別說求最短路徑了,從一個點到另一個點求一條通路都不會。

我想上面也回答了為什麼有些人學完資料結構一頭霧水了。資料結構是一門從實踐中發展來的學問,雖然在它的發展過程中,數學等其他學科起到了重要作用,但它仍然是一門實踐的學問,也就是說,沒有實踐,它什麼都不是。Foxmail的作者張小龍說,那些在教室裡死啃書本的學生固然可能在考試中拿高分,但只有你真正去寫一個什麼東西,才會真正理解資料結構是什麼。話很樸實,但這正是很多人學完資料結構得到的僅僅是幾個學分的原因。

目前資料結構學完等於白學的狀況的產生,是兩方面的原因,書和學生都有責任。有些人對著枯燥的標準文檔(比如死啃ISOxxxx的神人們)一樣能得到想要的知識;而一些優秀的教科書確實影響了成千上萬的學生。在沒有好書的時候,就能顯出某些人的天資過人(亦或者是勤能補絀);而只有好書的出現,才會有更多的合格人才。

就目前我看過的教科書而言,《資料結構演算法與應用-C++語言描述》算是最好的了,不為別的,單是每章的應用部分就足以配得上“最好”二字。網上有電子版,囊中羞澀的可以DOWN下來看看。當然,有精力和耐心的,我還是建議去看Knuth那三本,從那裡得到的不僅僅是資料結構,更多的是學到了如何應用你所學的理論,很遺憾的是我只是挑著讀了幾章。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.