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