怎樣學好數據結構和編程?

作為一名必須要學好編程的專業的大學生,目前還不知道該怎樣學編程,上學期學的java,整個學期都很少編程,這學期學習數據結構明顯有些吃力。我想問問各位大牛怎樣學好編程和數據結構?還有就是真正的編程牛人都必須具備哪些素質?通過怎樣的學習能達到這樣?謝謝~


問問自己,花了多少時間在寫代碼上?寫了多少代碼?你就知道為什麼吃力了。

無他,唯熟爾。

真正的牛人,不管什麼方向的,無非是多想和多做。一個初學者還涉及不到什麼天賦和適合的問題。

編程這東西的確是入門比較難,所以需要付出更多的努力,別以為好好聽課就能學好計算機,只上課就廢了。

等編程能力強一些的時候,去做ACM吧,那會讓你對演算法的理解有一個很大的提升,不用做太多,一二百道足夠了。


1、搞清楚典型的數據結構有哪幾種,比如線性表、棧、隊列、串、樹、圖,知道典型的查找和排序演算法;注意,對於這些你只需要知道不必太深入,腦海中有個印象,知道大概怎麼回事,回頭用到的時候能知道在哪裡查就可以。

2、詳細研究棧、哈希表(字典)。棧這個東西在計算機中處處能見到,理解了棧對於理解計算機本身很有好處,記得嘗試用棧的觀點來看計算機。字典就不說了,我想絕大多數的人都查過字典,應該知道字典有什麼用,想像一下沒有字典的話,從成千上萬個字中找到你想要的時有多痛苦。

3、完全弄明白時間複雜度、空間複雜度是怎麼回事。理解這一點可以讓你自己在寫代碼時不至於寫出有明顯效率問題的代碼,默默的提高你的代碼質量。

4、上手實際項目,積累項目經驗,看看項目哪裡用到了你所知道的數據結構和演算法,搞清楚為什麼用,能不能用另一種數據結構或演算法讓它變得更好。

5、一兩年過後回頭再翻數據結構和演算法的經典書籍,看看那些你曾經粗讀過的內容,我想你會看得很愉快的。

最後,記得手邊常備一本講數據結構和演算法的書,方便你想到時當手冊查查,我個人推薦《大話數據結構》(http://book.douban.com/subject/6424904/)。


方法,其他回答者已經說了很多了。

如果還沒找到感覺,體會一下這句話:

"程序員需要每天編程4個小時以上。" from Alexander Stepanov

當年我在講台下面聽到Alex講這句,虎軀一震。


趕緊動手寫代碼吧,親~

編程牛人都是在不停學習,,不停coding,debug。。。

找本靠譜的講數據結構和演算法的書,慢慢看,慢慢積累。。

如果你看完知乎的答案後就能扭頭google一下某個不熟悉的數據結構然後努力實現他,那麼我相信你的水平肯定提高很多的。。很多人學習的開始總是雄心勃勃,混論壇貼吧看看什麼書好,什麼數據結構容易簡單,然後再看看學習數據結構將來有什麼好處,再看看別人的學習經驗,然後買書,然後過去了很長時間才開始,殊不知高手在這期間已經接觸很多知識了。。打開IDE,敲個二叉查找樹先~

如果可以的話,了解下ACM/ICPC,可以使學習的過程不那麼枯燥~


實踐coding才是王道,對於工程師來講,不止編程甚至整個技術領域最需要的是投入實踐當中。即使是搞理論研究,書本知識都不是決定性的東西,實踐經驗+判斷能力+想像力是你要培養的重點之重點。請看我的微薄 http://t.cn/zOCWNdI


多看書,多畫圖,多寫碼,多讀別人的源碼


如果單純是想同時提高數據結構理解和代碼的能力。你不妨可以直接看C++ STL的代碼。資料到處都是。然後自己試著實現幾個簡單的容器,迭代器,演算法。

可以說,STL中覆蓋了教科書中大部分常用的數據結構與演算法(圖論部分除外)。


怎麼學好數據結構?看看這個學習流程,希望對你有幫助!


不贊同多寫垃圾代碼再回頭理解數據結構和演算法。Java的語法課練的少和學演算法吃力是兩回事,寫出數據結構需要的語法知識和對語言的限制及其有限。

這數據結構和演算法應該是起步點,從一開始就應該理解學cs就要用最少的資源完成最大量的計算。

學數據結構和演算法,完全可以用偽代碼,可以在紙上debug,也可以用python學。

偽代碼路線具體參加mit的introduction to algorithm,(這本書比較偏理論,證明部分可以跳過一些)。

python學法具體參見udacity的課程。(十分簡單好學,在線compile)

java學法,順便解決oop的基礎,最好參看berkely 的cs61b。(最佳路線,但我不知道有沒有人做過中文字幕)。

只看不寫作用有限。如果使用偽代碼可以讓你更好的減少對語法的注意力,而培養思維。

python十分簡單,可以少考慮很多問題,面試完美語言。

java應用廣,可以直接上手工作。對於小公司比較看重這些。

說實話,高級演算法應用不大,搞懂數據結構和有關的演算法比如bfs及dp對你的幫助要大得多。

做演算法題做基礎一些,linkedlist,stack,queue,tree和graph和hash table都自己實現一下,先不要用library。

做完以上你就很不錯了,上手其他的知識都會比較快。編程環境和語言飛速更新換代,這一行要做好就無法停止學習。

數據結構的重要之處在於它是timeless(不會隨時間淘汰)和universal(應用廣泛)的。所以那些頂級it公司才如此看重這一素質。


先去杭電A個百來道題,等做的有感覺了去北大,浙大等A。剛開始困難了寫,需要堅持。多用google


1 學好數學

2 多寫代碼

3 了解程序的根基:硬體、彙編。。


單純為了學習而編程就會越學越迷茫,你可以找一個自己喜歡的領域,多看一些開源代碼,貢獻自己的程序,分享自己的經驗,不知不覺你就是高手了


多做題,數據結構,演算法什麼的,跟數學差不多,想當年數學,物理這些課程,我們不都從題海戰術中走出來的。


真正的用從數學的角度解決計算機編程問題。。。貌似很難。。


看看視頻,寫寫代碼,實踐實踐。數據結構與演算法視頻


給你介紹個好老師,韓順平老師,網上有他關於java ,php ,及幾個重要資料庫的完整詳細視頻,希望對你有所幫助


推薦閱讀:

鏈表是一種數據結構還是數據類型?
初學數據結構,怎麼理解書上的這句話?
問一個關於寄存器與棧的問題?
剛入門編程的人有必要學習數據結構嗎?
C語言初學者進階學習數據結構與演算法路線?方法?

TAG:程序員 | 演算法 | 編程 | 數據結構 |