Re: [問題] 程式的邏輯問題

看板C_and_CPP (C/C++)作者 (Alien)時間16年前 (2009/04/27 18:21), 編輯推噓9(9014)
留言23則, 5人參與, 最新討論串2/3 (看更多)
※ 引述《shadown ()》之銘言: :  最近遇到一個面試官,有問到我一個問題,是關於串列 :  方面的。 :  題目是:連續輸入幾個數字,最後輸入零表示程式結束。 :      之後再輸入一個數字,將前面輸入的數字與此 :      數比較,印出比此數大的數字。 :  我的解答,是用while來判斷串列中的data值是否為零, :  是的話表示資料已經到最後一筆,結束比較大小的判斷。 :  面試官的解答,是用while來判斷串列中的next值是否為 : NULL,是的話表資料已經到最後一筆,結束比較大小的判 :  斷。 :  面試官的回答雖然在邏輯上是比較合理,但我覺得我的方 :  法應該也不能算錯,畢竟題目是說用零來當結束。所以想 :  請教一下各位前輩,我這樣算是錯的嗎? 補充一點, 一般的寫法也不是像考官說的那種. 通常是檢查 pointer 本身是不是 null, 而不是 next 是不是 null. (當然, 考官說的要寫也寫得出來) for(node* p = myList; p != NULL; p = p->next) { // do something on p } 如果檢查的是 p->next 是否 null 就比較麻煩了 (一時想不到比較好看的寫法) if (myList != null) { node * p = null; do { p = ((p == NULL)? myList : p->next); // do something with p } while (p->next != null) 超難看 XDD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82

04/27 18:53, , 1F
個人覺得拿next判斷也很常見, 不過用next判斷有一個問題
04/27 18:53, 1F

04/27 18:54, , 2F
是, 要先確定第一個node本身是不是null或保證一定有值:)
04/27 18:54, 2F

04/27 18:57, , 3F
換成 while ((p=p->next) != null); 會不會太醜 ? XD
04/27 18:57, 3F

04/27 19:00, , 4F
嗯, 可是嚴格來說那也是檢查 p 而不是檢查 next呀
04/27 19:00, 4F
想了一想, 修改過, 有好看一點了 :P 不過我還是比較喜歡第一種 ※ 編輯: adrianshum 來自: 202.155.236.82 (04/27 19:03)

04/27 19:06, , 5F
小弟我記得之前寫list時, always讓list有個dummy的head,
04/27 19:06, 5F

04/27 19:07, , 6F
之後的判斷就可以直接while或for判斷p->next是否null了.
04/27 19:07, 6F

04/27 19:08, , 7F
現在想一想, 似乎直接判斷p就好了, 還省1個node的空間XD
04/27 19:08, 7F

04/27 19:10, , 8F
當時這麼做, 是因為我很懶的判斷現在有沒有第一筆資料,
04/27 19:10, 8F

04/27 19:10, , 9F
第一種寫法好棒!原來指標可以用for來判斷,又學了一招。
04/27 19:10, 9F

04/27 19:10, , 10F
我也是習慣用個 dummy head ....
04/27 19:10, 10F

04/27 19:11, , 11F
是不是需要建head node等等; 所以固定開個dummy head:)
04/27 19:11, 11F

04/27 19:13, , 12F
l大(握)....XD check eax和eax加固定bias不曉得有沒有
04/27 19:13, 12F

04/27 19:13, , 13F
performance上的差距, 雖然看起來都是一條inst解決@_@"
04/27 19:13, 13F

04/27 19:14, , 14F
check的地方忘了 [], 果然我和asm不熟....Orz
04/27 19:14, 14F

04/27 19:15, , 15F
我倒沒有做過 dummy head 耶. 有一個 dummy node 總
04/27 19:15, 15F

04/27 19:16, , 16F
覺得有點怪怪的 XD 倒是通常外面包一個 struct (C 的
04/27 19:16, 16F

04/27 19:16, , 17F
年代) 比較多.
04/27 19:16, 17F

04/27 19:32, , 18F
糟~~小弟我記憶體只有128M跑98的時候就在開dummy了XDDD
04/27 19:32, 18F

04/27 22:07, , 19F
dummy就跟陣列邊界值多宣1個一樣 省事但是費空間囉~
04/27 22:07, 19F

04/28 01:44, , 20F
我學 programming 的年代是 95 + P-133 + 32MB RAM XD
04/28 01:44, 20F

04/28 01:46, , 21F
再說下去等下就有人拿洞洞卡寫程式了這我哪受得了XD
04/28 01:46, 21F

04/28 01:47, , 22F
不過, 以前寫程式的時候真的是有一堆亂七八糟亂用的.
04/28 01:47, 22F

04/28 01:48, , 23F
現在工作是把亂七八糟的程式加/修一些亂七八糟的代碼Orz
04/28 01:48, 23F
文章代碼(AID): #19zOSrKG (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #19zOSrKG (C_and_CPP)