按值查找有两种情况:
① 根据指定数据获取该数据所在位置(该数据的地址)
② 根据指定数据获取该数据所在的位置序号(是第几个数据元素)
例:根据指定数据获取该数据所在的位置(地址)
分别查找值为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