C 語言初學教材 - 第六章 查詢好友
- Get link
- X
- Other Apps
C 語言初學教材 - 第六章 查詢好友
現在我們要在鏈結串列中實作出線性搜尋,以便運用在查詢好友上面。類似新增好友找到 nextPtr 成員為 NULL 的方法,鏈結串列中的線性搜尋就是逐一比對每個節點,若是找到與 data.name 相同的節點,就傳回指向該節點的指標,如果都沒有找到,就回傳 NULL 。
這樣的線性搜尋如下的函數 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("暱稱: %sn", targetPtr->data.name);
printf("年紀: %dn", targetPtr->data.age);
printf("暱稱: %sn", targetPtr->data.sex ? "男" : "女");
printf("暱稱: %sn", 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() 的運作方式。
- 為什麼搜尋不需要用到雙重指標?
window.___gcfg = { 'lang': 'zh-TW' };
- Get link
- X
- Other Apps