[F11_Datastruct] 498512746 lab2心得

  1. 心得:

    一剛開始在寫程式的時候我完全不知道要從何下手,我只好問同學,上網查資料,看課本,在剛開始寫LAB2的時候,對STACK還不熟,我就先用JAVA給的JCF函式庫的STACK開始寫,和練習,剛開始不知道怎麼做只好先從一開始的,資料輸入開始,還有split切割,剛開始就先從5 + 6 這樣簡單的測資開始,剛開始時先不要做很多IF判斷,就先直接看怎麼把資料放入陣列,我先設了2個STACK,先設了第一個判斷式,遇到數字先放入op[],遇到運算符號放入STACK然後等數字放完,再放運算符號,從這樣簡單的小程式開始擴大,開始學會判斷左右括弧,優先順序…..等,做到後來會覺得很亂,不知道哪個數子在哪個STACK,哪個運算符號又在哪個STACK裡,真的會看的亂七八糟,在這種時後只好使用DEBUG工具,然後拿出紙筆畫出2個STACK,一步一步畫出現在數子在哪了,現在運算符號被壓入,哪個堆疊,遇到優先順序時,這個數子或符號她會在哪裡,經過辛苦的一個月後,程式終於完成了,傳上去之後卻發現有一個錯誤,剛發現時一直在找是哪裡出了問題,自己設想很多測資,像是負數,2位數以上的數子,或是設一堆括弧,最後都發現沒有問題,想破了頭都還是想不出來,最後也只好去問助教,助教很好心的告訴我測資,還寫了一個範例給我看20-(-5+8)*7+10,如果是正確的她應該會是20,-5,8,+,7,*,-,10,+,答案是9,而我跑出來的是20,-5,8,+,7,*,10,+,-,我的答案是-11,助教告訴我,我的STACK裡有2個運算符號,加和減,一般我們做運算時只考慮+-*/的優先順序,卻沒想過+,-,的因為式子從左到右,應該做完*時要先POP出-才對,而我沒有,做完10時,才一次都POP出來,之道原因後我再判斷式裡寫一個IF,當遇到做完*/%時,運算的STACK裡還有東西時,就先POP出來再跑下一個迴圈,這個問題修改了之後,我的程式終於通過考驗了,全對了!!YA!!!!,但助教有跟我說,我的STACK是用陣列寫的而不是用Linked list寫的,這樣就算我全對分數還是會比用Linked list寫的STACK卻只對一個測資還要低,當我把20-(-5+8)*7+10的問題修正後,我馬上開始思考要怎麼把陣列版STACK換成Linked list版的STACK,剛開始我也不知道怎麼辦,想說該不會要重打整個程式碼了吧?!!,再無奈之下只好先把課本STACK的範例打出來,然後貼上去,沒想到這樣就直接過了,程式碼完全不用做任何修改,這真的是天助我也,幾經一番波折之後終於完成了,就像助教說的我應該遇到不會時,應該早點問她,而不是拖到時間快到時,在那邊趕作業,這段時間很感謝助教,這2個禮拜我三番兩次跑去煩助教,一直問問題,而且我在剛開學沒多久要寫LAB1時就有去問過助教很多資結的問題了,因為我是轉學生我的JAVA只有過上學期,只會簡單的迴圈,IF那些,剛開始助教很有耐心的一段程式碼一段程式碼這樣教我,在助教的耐心與鼓勵之下我成功了,助教謝謝你哦,下次一開學我就早點寫作業,早點去煩妳好了XDD