單鏈表-按值查找


按值查找有兩種情況:

① 根據指定數據獲取該數據所在位置(該數據的地址)

② 根據指定數據獲取該數據所在的位置序號(是第幾個數據元素)

例:根據指定數據獲取該數據所在的位置(地址)

分別查找值為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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM