查找邏輯:從表頭開始依序掃描節點,比較資料域是否為目標值。找到返回節點指標,否則返回 NULL。
只要知道表頭指標,即可透過 link 域遍歷整個鏈表。
stud *search(stud *h, char *x) {
stud *p; // 當前掃描指標
char *y; // 暫存姓名指標
p = h->link; // 從第一個實際節點開始(跳過表頭)
while (p != NULL) {
y = p->name;
if (strcmp(y, x) == 0) // 字符串比較,相等返回 0
return p; // 找到,返回節點指標
else
p = p->link; // 移至下一節點
}
if (p == NULL)
printf("沒有找到該資料!\n");
return NULL; // 隱式返回
}
int main() {
int number = N;
char fullname[20];
stud *head, *searchpoint;
head = creat(number); // 建立鏈表
printf("請輸入要查找的姓名: ");
scanf("%s", fullname);
searchpoint = search(head, fullname); // 查找
if (searchpoint)
printf("找到: %s\n", searchpoint->name);
return 0;
}
strcmp 比較字符串(需 #include <string.h>)h->link 開始遍歷,跳過不存資料的表頭節點NULL 並提示