按值查找有兩種情況:
① 根據指定數據獲取該數據所在位置(該數據的地址)
② 根據指定數據獲取該數據所在的位置序號(是第幾個數據元素)
例:根據指定數據獲取該數據所在的位置(地址)
分別查找值為30和值為15的元素
① 用變量 e 表示要查找的元素
用 指針p 指向首元結點:p=L->next;
② 比較 指針p 當前指向結點的數據域,與 e 是否相等
③ 如果不等,則計數器加一,然后 指針p 向右移動:p=p->next;然后比較新指向結點的數據域是否與 e 相等
④ 找到后,
如果要找的是第幾個元素,返回 i 的值;
如果要找的是位置,就返回 指針p 的值。
⑤ 但如果查找一個並不存在的元素,當 p=NULL 時,就查找結束。
算法步驟:
① 從第一個結點(首元結點)起,依次和 e 相比較;
② 如果找到一個其值與 e 相等的數據元素,則返回其在鏈表中的 “位置” 或 地址;
③ 如果查遍整個鏈表都沒有找到其值和 e 相等的元素,則返回 0 或 “NULL”。
代碼:
//返回被查找元素內存地址的查找方法 Lnode *LocateElem_L(LinkList L, Elemtype e){ //在線性表L中查找為e的數據元素 //找到,則返回L中值為e的數據元素的地址,查找失敗返回NULL p=L->next; //循環條件:指針p 不為NULL,指針p所指向結點的data域不等於 e while(p && p->data!=e){ p=p->next; //如果找到了,就返回結點存儲地址,如果沒找到就返回NULL return p; } } //根據指定數據獲取該數據位置序號(第幾個) int LocateElem_L(LinkList L, Elemtype e){ p=L->next; j=1; while(p && p->data!=e){ p=p->next; j++; } //返回 L 中值為 e 的數據元素的位置序號,查找失敗返回0 if(p){//如果找到了,也就是p不為NULL,就返回 L 中值為 e 的數據元素的位置序號 return j; }else{//如果沒找到,也就是p為NULL,就返回0 return 0; } }