這樣的線性搜尋如下的函數 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() 的運作方式。
- 為什麼搜尋不需要用到雙重指標?
沒有留言:
張貼留言