這樣的線性搜尋如下的函數 lsearch()
LinkedListNode *lsearch( char *target, LinkedListNode *startPtr) { LinkedListNode *currentPtr = startPtr; while (currentPtr != NULL) { if (! strcmp (currentPtr->data.name, target)) { return currentPtr; } currentPtr = currentPtr->nextPtr; } return NULL; } |
我們另外需要一個與使用者互動的函數 li() ,好接收使用者所要查詢的好友暱稱,以及顯示搜尋結果
void li(LinkedListNode *startPtr) { LinkedListNode *targetPtr; char iname[NAME_SIZE]; printf ( "\n請輸入要查詢資料的好友暱稱: " ); scanf ( "%s" , iname); targetPtr = lsearch(iname, startPtr); if (targetPtr != NULL) { printf ( "\n您所查詢的好友資料如下\n" ); printf ( "暱稱: %s\n" , targetPtr->data.name); printf ( "年紀: %d\n" , targetPtr->data.age); printf ( "暱稱: %s\n" , targetPtr->data.sex ? "男" : "女" ); printf ( "暱稱: %s\n" , targetPtr->data.relation ? "同學或朋友" : "家人" ); } else { printf ( "\n搜尋失敗,沒有這名好友的資料唷!\n" ); } } |
這樣在 itm.h 就需要增加以下兩個函數原型的宣告
LinkedListNode *lsearch( char *target, LinkedListNode *startPtr); void li(LinkedListNode *startPtr); |
然後把以上兩個函數定義放到實作檔 itmf.c ,來編譯執行測試看看吧!假設已加入 laura 為好友

輸入 3 進行查詢 laura 是否在好友名單中

查詢結果如下

再輸入 3 查詢 tom 是否在好友名單中

不意外的,沒有建立屬於 tom 的資料,自然搜尋不到囉!

問題與討論
- 說明 lsearch() 的運作方式。
- 為什麼搜尋不需要用到雙重指標?
沒有留言:
張貼留言