首页 > 其他 > 详细

单链表-按值查找

时间:2021-04-23 00:00:39      阅读:20      评论:0      收藏:0      [点我收藏+]

按值查找有两种情况:

① 根据指定数据获取该数据所在位置(该数据的地址)

② 根据指定数据获取该数据所在的位置序号(是第几个数据元素)

例:根据指定数据获取该数据所在的位置(地址)

分别查找值为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;
    }
}

 

单链表-按值查找

原文:https://www.cnblogs.com/AronKeener/p/14690313.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!