精華區beta C_and_CPP 關於我們 聯絡資訊
如題……剛轉入資工系,第一次遇到幾百行的程式碼,都還是用以前天真的寫法。 想當然這學期已經差不多要被當了,但是我想認真學好這門科目,學校是用horowitz的c資料結構這本書。 我的問題不是上課無法理解內容,考試還算過得去,自己唸書也大致可以吸收,但是老師出的作業我從來沒有自己完成過,都要詢問同學,甚至看過同學的code,到最後甚至都不是我的邏輯了……想當然實作的分數相當低。 想請問各位有沒有推薦的資料結構書,內容大概到hash就符合我的要求了,前幾天有去找老師問過,我們老師推薦用圖解資料結構使用c 想請問版上各位大神還有沒有其他推薦的書,比較想要每章背後都有基本到進階的實作題目可以練習的課本……真的不想放棄這個科目啊 弱弱在問一下,如果資料結構都學不好是不是以後要考慮轉行了…… ----- Sent from JPTT on my Samsung SM-G950F. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.83.76.58 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1515597162.A.071.html
sunneo: 倒是不用轉行,每個人的技能樹點的方式都不一樣 01/10 23:21
steve1012: 可以找些題目來刷 就知道怎麼用了 01/11 00:12
Hazukashiine: 單純聽你的敘述 我覺得你應該懂一些資料結構的概念 01/11 00:26
Hazukashiine: 但是對於C語言不夠熟悉 讓你覺得你好像不懂資料結構 01/11 00:27
james732: 先把書上的範例程式親手打到電腦跑過 01/11 00:35
freeunixer: #1P_99ziw (Gossiping) 01/11 00:57
chuegou: 作業沒辦法自己完成這問題比較嚴重 01/11 01:32
chuegou: 表示要google什麼關鍵字都沒頭緒? 01/11 01:32
s0914714: 應該先把C學好吧 資料結構了解使用時機比較重要 01/11 02:05
springman: 多練習將資料結構的程式寫出來,拿來在其他程式中使用. 01/11 04:39
springman: 寫程式可能要一、兩年才會比較習慣電腦的想法。01/11 04:40
testPtt: 最好不要c01/11 08:02
dou0228: 用 C 是好事啊,C 學的好,表示你有相當程度的基礎01/11 08:56
Ommm5566: 樓上不要亂推阿01/11 09:18
Ommm5566: 不要用C 建議python01/11 09:18
jamfly: 推python 還有mit的開放式課程01/11 09:34
Neisseria: 可以練兩輪,第一輪用 Python,比較簡單,著重觀念01/11 09:37
Neisseria: 第二輪改用 C,這時候就是熟悉一些語法細節01/11 09:38
Neisseria: 我猜學校應該還是要求用 C/C++ 實作,遲早要會的01/11 09:39
感謝以上大大留言,那看起來就是上面那篇的圖解那本書不錯囉? ※ 編輯: Chen334 (111.83.76.58), 01/11/2018 09:40:56
descent: 大話資料結構 參考一下, 我是買簡體版本01/11 10:20
damody: c吧 python太簡單01/11 10:27
MOONRAKER: 哇咧這到底什麼版阿 版名有python喔01/11 11:04
Sidney0503: 樓上 所以呢? 這篇文章本身就跟C/C++無關了01/11 11:33
Sidney0503: 學概念的時候本來就是用簡單可以達到的語言阿01/11 11:34
Sidney0503: 不然還不知道自己有沒有想錯先死在語言語法01/11 11:34
TWkobe: 用哪一種都沒差 只是用py簡單的多01/11 12:13
TWkobe: 我覺得你可以試試先在紙上run一遍 想通後再寫程式01/11 12:15
TWkobe: 觀念通了就剩下是語法的熟悉度01/11 12:16
asd456fgh778: 不要 python01/11 12:47
loa123: 你們老師推的那本看過...很難 但學起來的話會很精實01/11 12:58
大大說圖解還是Horowitz的 ※ 編輯: Chen334 (111.83.76.58), 01/11/2018 13:33:44
MOONRAKER: 不錯很好 順便把版上問linklist的通通幹掉吧 01/11 14:16
MOONRAKER: 那都是資料結構 都跟C++無關 科科 01/11 14:16
MOONRAKER: 看起來現在有很多人從python起步所以也叫別人用py學習 01/11 14:19
MOONRAKER: 本人完全不覺得需要多搞一種語言治絲益棼 01/11 14:20
MOONRAKER: 你們說順手 對原po就真的順手?有沒有聽過邯鄲學步? 01/11 14:21
MOONRAKER: 這個也學那個也學 最後都學不好 大有人在 01/11 14:21
MOONRAKER: 而且py實在是很難用 沒錯很難用 我可以再說一次 01/11 14:22
Sidney0503: 自己不會用說難用 看過太多人這樣說了 01/11 14:43
Sidney0503: 一大早就要戰語言? 01/11 14:44
Sidney0503: 戰力這麼弱就別出來討打臉了 01/11 14:45
Sidney0503: C++的優勢在於擁有最多的feature 選擇上非常多 01/11 14:48
Sidney0503: 所以適合極致效能調教 對於不同case使用不同手段優化 01/11 14:49
Sidney0503: 相反的python的簡潔非常適合快速實作演算法 01/11 14:50
Sidney0503: 所以很多library都是c/c++寫library包成python界面 01/11 14:50
Sidney0503: 現在原PO要學得是最上層的抽象演算法實作 不是效能 01/11 14:51
Sidney0503: 你說難用 對原po就真的難用? 01/11 14:51
Sidney0503: 很多人自己沒腦也以為別人沒腦 希望你不是這種人 01/11 14:52
Sidney0503: 之前有問linklist通常是貼程式碼尋求一些狀況處理 01/11 14:54
Sidney0503: 兩種情況問題本質不一樣 連這都分不清楚還亂回答 01/11 14:55
james732: 話說有人會想用python自己實作個linked list出來嗎...? 01/11 15:08
james732: 如果原PO問題是在實作的話python應該不是好建議 01/11 15:11
ilms49898723: 寫不出來有可能是1.死在語法 2.死在邏輯 01/11 15:37
ilms49898723: 如果死在邏輯我不認為換語言有幫助 01/11 15:37
james732: 我覺得死在邏輯的話學一下debugger有幫助XD 01/11 15:50
Schottky: 不是啊你在 C/C++ 板推 Python 擺明是來亂的嘛 01/11 16:11
Schottky: 我在其他板不會說 Python 難用,在這個板就一定要大聲說 01/11 16:12
Schottky: 我覺得啊,C 是最好的語言了,其他的語言都應該廢除(戰) 01/11 16:13
druid0214: 初學推OO語言 java不錯 01/11 16:23
uranusjr: @Schottky 你這樣不就挑起 C vs C++ 內戰了 01/11 16:27
uranusjr: 不過我用經驗告訴你 Python 不太適合拿來學資料結構, 因 01/11 16:28
uranusjr: 為課本上要你實作的有 87% 都內建你會寫到人格分裂 01/11 16:28
uranusjr: 如果要學「好」資料結構用 C 從頭做一次還是很有幫助01/11 16:29
james732: 確實,python的list簡單到根本不用擔心任何實作問題XD01/11 16:30
Schottky: @uranusjr 別這樣我只是推文字數不夠 XDDDD01/11 16:37
Schottky: 確實課本上的資料結構,語言多半都有內建了還練個○01/11 16:38
james732: 練習python的資料結構怎麼正確使用也是一種練習啦....01/11 16:49
james732: 不過就看這算不算是原PO需要的了 01/11 16:49
cphe: 你用的教科書其實就夠了,我猜應該是你對C不熟~01/11 18:14
cphe: 資料結構的實作用pointer其實還蠻直覺得~ 如果你覺得直接看 01/11 18:14
cphe: code很複雜,可以上網找你想實作的pseudo code,或是圖解01/11 18:15
cphe: 現在網路很方便阿~ 書上不懂的總是可以上網找到更適合理解的01/11 18:15
cphe: 換一本書不見得可以解決你的全部問題 01/11 18:15
cphe: 好比說一個merge sort,看完精神之後就自己動手寫一次能跑的01/11 18:16
SecondRun: sort我以前好像都去youtube看跳舞影片XD01/11 23:45
CoNsTaR: 要簡單當然用 Haskell 啊 01/12 01:00
CoNsTaR: 只是有些資料結構做出來會覺得很沒意義就是了01/12 01:00
oToToT: 一些資料結構用python明明就很難寫01/12 08:57
Darkautism: python狂你在偷換概念?原po是要學資料結構不是寫演算 01/12 11:53
Darkautism: 法,你到底有沒有在看標題? 01/12 11:53
CoNsTaR: 樓上求不用演算法的資料結構。。。01/12 12:31
CoNsTaR: 上面就說了 資結難的地方在演算法難實作 所以有人提供能01/12 12:33
CoNsTaR: 夠讓演算法簡單點的建議 看懂了嗎?01/12 12:33
steve1012: 演算法跟資料結構是一體兩面01/12 12:59
真的很謝謝大家熱烈的回覆,我想在重新闡述一次我最大的困境。 例如老師第一次的作業是走地圖,我知道要用DFS走,或是BFS來尋找最短路徑,以及stack的實作。但是實際在compile,我卻坐在電腦前面八小時沒有進展,可能跟我剛轉系有關係(也可能只是藉口),之前的code最多都只接觸到3 40行,同時也才體會到與同學的差距,才想問問大家有沒有書可以增加實作的能力。 再次謝謝大家的回覆,我每一則都有看 ※ 編輯: Chen334 (42.76.14.22), 01/12/2018 15:25:28
Lipraxde: 增加實作能力的是練習,書是補充理論用的。走迷宮的話 01/12 17:14
Lipraxde: 是別人告訴你要用DFS、stack走,還是你自己想出要怎麼 01/12 17:14
Lipraxde: 走的? 01/12 17:14
回樓上,是同學跟我說的……在這之前我根本不知道什麼DFS BFS ※ 編輯: Chen334 (42.76.14.22), 01/12/2018 18:30:27
freeunixer: 大家本來都不知道,都是聽人家講的. 01/12 19:22
freeunixer: 所以你先去把你的 C 課本找出來,先把指標,結構搞好吧. 01/12 19:23
SecondRun: 走地圖之前 你先看看你的容器是不是做得出來 可以用 01/12 19:33
cphe: 跟你寫幾行code沒有關係,是你對程度熟練度不夠,多寫吧 01/13 00:05
cphe: 如果是程式本身不熟,就把書的習題拿出來一題一題做 01/13 00:06
Lipraxde: 資料結構會教怎麼把程式寫得更快、更好,我修過後回頭 01/13 01:06
Lipraxde: 看以前自己寫的程式發現許多可以改善的地方。本來程式 01/13 01:06
Lipraxde: 就不太會寫的話不會修過資料結構就突然變很會寫的。 01/13 01:06
art1: 既然已經知道關鍵字,就先去了解DFS是什麼,然後再去看別人 01/14 10:20
art1: 的程式碼是怎麼實現用DFS來走地圖的 01/14 10:20
art1: 不需要在基礎不好的時後強求自己想出來怎麼寫 01/14 10:21
art1: 候 01/14 10:21
art1: 但看別人的程式碼的時候需要搞懂每一行寫的內容,知道那些 01/14 10:26
art1: 程式碼是在做什麼?像是搬移資料、儲存資料、運算後儲存之類 01/14 10:26
dmjohnny: 多寫,看完同學的記起來,自己寫一遍,再看書,再寫一遍 01/14 22:17
kobe8112: 建議你先釐清到底是程式應用不熟悉,還是根本搞不懂演算 01/15 00:53
kobe8112: 法怎麼套用在題目上,驗證方式就是看自己寫不寫的出 01/15 00:54
kobe8112: 能夠完成題目的pseudo code 01/15 00:54
xjpjeass: 我也是轉系..資結的實作寫作業我也是很頭痛 可能是同時 01/15 16:11
xjpjeass: 修一二年級的課 之前沒有修過程式課程 還沒摸透寫程式的 01/15 16:11
xjpjeass: 感覺 我覺得我的問題跟原po滿像的orz 01/15 16:11
> -------------------------------------------------------------------------- < 作者: james732 (好人超) 看板: C_and_CPP 標題: Re: [討論] 想重新學好資料結構 時間: Thu Jan 11 15:07:17 2018 我建議以下兩點 1.一定要親自寫過code,不要只"讀書" 2.如果寫過還難以理解,就要善用IDE的功能單步執行與監看式功能 其實我一開始學資料結構的時候 一直覺得很難想像資料間的關係 譬如說 struct Node { struct Node *next; int data; }; 那個next是什麼鬼看書真的很難理解 struct Node n1, n2, n3; n1.data = 10; n1.next = &n2; n2.data = 20; n2.next = &n3; n3.data = 30; n3.next = NULL; struct Node *now = &n1; while (now) { printf("now->data %d\n", now->data); now = now->next; } 那個 now = now->next; 到底又是什麼啊 就算實際寫過,跑過,看到印出10,20,30 還是會覺得很難理解 不過感謝我們有Debugger,可以單步執行並且看到當時的memory https://i.imgur.com/0FIEiXd.png
實際一跑就知道它們之間的關係 然後在迴圈裡一直按F10,看它在next的時候now會怎麼變化 這樣一步一步慢慢跑,慢慢看 就可以真的理解這個鬼東西到底在做什麼 接下來更複雜的tree之類的也一樣,如果覺得無法想像的話 就給他單步執行下去就對了 這是我當時學習資料結構的方式 看到那個next真的一個一個串起來的時候好感動啊XD 如果原PO還沒用過單步執行與memory monitor 就裝個Visual studio Community吧 https://www.visualstudio.com/downloads/ 隨便寫個程式按F10就可以開始探索這個新世界了XD > -------------------------------------------------------------------------- < 作者: damody (天亮damody) 看板: C_and_CPP 標題: Re: [討論] 想重新學好資料結構 時間: Fri Jan 12 13:24:18 2018 資結的範圍是各種資料結構的實作 單向佇列 雙向佇列 堆疊 陣列 單向連結串列 雙向連結串列 紅黑樹 B樹 二元樹 雜湊表 堆積樹 集合 圖 演算法的部份 針對上面各種資料結構的 排序 搜尋 區域解等於全域解:動態規劃 找極值:最佳化 其實用哪種語言做應該都可以啦 不過你既然來了這版 當然是跟你說c++11/14/17啦 你玩遊戲一直碾壓無腦贏 你會想一直玩嗎 c++就是一個高手才玩的起來的 超級hard core遊戲 大家快來玩喔~ --- 打信長了啊 https://www.patreon.com/nobu_game ----- Sent from JPTT on my LGE LG-H860. > -------------------------------------------------------------------------- < 作者: godspeedlee (妳,我可以) 看板: C_and_CPP 標題: Re: [討論] 想重新學好資料結構 時間: Wed Jan 17 14:48:53 2018 我到覺得現在學資料結構比我 1x 年前唸書時可以 參考的資料多太多了,從最深一堆數學式到一堆插圖都有, 甚至還有小說 如果是我,我會建議先找一本最簡單的,那種一堆插圖漫畫人物 的都沒關係,然後很快把他看完,接著去找幾本大部頭的書當 參考資料深入研究。 比如說下面這本,Introduction to Algorithm 作者之一寫的入門書, 只能說如果當初有這本書,我的成績應該可以再高一些些吧?XD https://book.douban.com/subject/26696971/ 這本書蠻可愛的,不過我買了還沒看 http://www.books.com.tw/products/CN11418953 這位作者寫的 Data Structures and Algorithm Analysis 是我 唸書時的教科書,code 寫得清晰易懂,說起來他算 Knuth 的徒孫 http://users.cs.fiu.edu/~weiss/ Knuth 大弟子 Robert Sedgewick 寫的這一系列也有很多人推 https://goo.gl/EkPnBr 國內李家同、張真誠等教授也有出書,不過小弟沒看過不敢評論 至於要怎麼弄懂演算法,下面這是一個方法,比方排序你可以弄一副紙牌: https://tinyurl.com/yatavoal 又或者是你可以利用 Excel,把迴圈中每個變數的變化敲進去仔細弄懂 linked-list, tree 這些東西就不用說了,紙筆都畫不出來也不用想寫程式了 還有一個最重要的是遞迴,對初學者來說這不是一個容易習慣的概念, 但是請練到成為身體的一部分,這時用 gdb 一層一層剝開可能比較容易理解, 而且 gdb 有一項特異功能,可以倒著執行回去 最後推薦一本雖然跟資料結構沒關係,對練功卻很有幫助的書: http://www.books.com.tw/products/0010752714