無聊練習堆疊
這聽起來有點可笑
畢竟這東西我一直沒熟悉過
但堆疊在許多場合時常用到
於是就寫一個基於堆疊的排序法
要先聲明這種排序法不入流
因為是我自己亂搞的
這種排序法需要額外的空間(兩個額外的陣列)
因為操作堆疊一定要有判對堆疊是否已滿的函式
起初那個判斷用的函式只在堆疊為空的時候回傳
我想這樣寫就夠了
等到我全部程式寫完後
排序出來的結果會有些數字順序錯了
有些測試資料又全對
用單部執行追蹤程式進行赫然發現有些判對具應該是TRUE卻變成FALSE
(5>3)&&(ifStackIsEmpty()!=1)(這時的堆疊並非是空的)註1
在這個地方TRUE變成FALSE
大約花了兩個小時還是找不到錯誤
不過就在今天中午吃飯前我明白了
ifStackIsEmpty()函是指針對堆疊為空時回傳
但不為空時的回傳卻沒有寫
導致函式的回傳值變的很奇怪(用「奇怪」是因為可以預測)
各位啊!
你是否也有這樣的困擾
請記得回傳值必須考慮其餘的可能性
不能只針對某一值做出回傳
當不屬於該值時也要做出回傳
不然你可能除錯除了半天也沒用
這種錯誤一次就夠了
找出這種錯誤對我來說真的需要花很多時間
註1:
int ifStackIsEmpty()
{
if(po==(-1))/*po是記錄堆疊最高位置的變數*/
{
return 1;
}
}