可以寫詳細點么,謝謝
uj5u.com熱心網友回復:
I=1p = L.elem;
while ( I<=L.length && !(*compare)(*p++,e)) I++;
這里e是要查找的元素
compare是函式指標, 這個函式原型應該是
int (*compare)( ElementType e1, ElementType e2) ; 用來比較兩個元素是否相同的
這是為了應對復雜度結構,而用函式指標的方式來替換直接的比較
如果線性表是int型別的,也就是ElementType是int型別,那么上面的代碼完全可以改為
while ( I<=L.length && !(*p++ == e) ) I++;
*p++ == e這個運算式,就是用指標指向線性表當中元素,挨個和e比較,沒有找到才會繼續找下一個,找到了while就退出了
陣列寫法沒有什么好解釋的吧
uj5u.com熱心網友回復:
線性表里面保存的可能是任何型別允許是一個struct結構,也許是float型別,也許是字串指標, 這些元素之間的比較不能用簡單的陣列寫法那種 直接的== 來判斷, 比如字串指標的==,就要用strcmp來替代; float的==,要用fabs(f1-f2)<EPSOLN的方式, 結構的比較就更復雜了。為了讓查找方法通用, 所以才提供了一個單獨的比較函式, 對于不同型別的線性表,用不同的比較函式來完成元素之間的比較
uj5u.com熱心網友回復:
I=1p = L.elem;
while ( I<=L.length && !(*compare)(*p++,e)) I++;
這種寫法, 當從while當中退出的時候, 還有做一個判斷
if ( I > L.length )
輸出沒有找到
else
I就是找到的索引了
uj5u.com熱心網友回復:
這個只要懂最基礎的語法就應該能理解了呀。第一個,compare就是p指向的元素和e比較,如果相等就回傳0,不等就回傳非0。所以只要回傳非0,就說明不等,所以while就會繼續回圈,直到i到達鏈表的最后(也就是i位置大于鏈表長度)
變成for回圈來說明
for(i=1,p=L.elem;i<L.Length;i++) {//順序表從開始節點到最后回圈
if(*compare(*p, e)==0) break; //如果找到則退出回圈
p++;//否則指標移到下一個元素
}
第二個,以陣列方式,通過陣列下標一直回圈,如果當前下標的元素和e相同就直接回傳下標,如果一直回圈到最后都沒找到,就回傳0
變成for回圈來說明
for(i=1;i<L.Length;i++) {//順序表從開始節點到最后回圈
if(L[i]==e) return i; //如果找到則回傳下標i
}
return 0;//都找不到就回傳0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/123348.html
標籤:其它技術問題
上一篇:Dev c++無法除錯
