#数据结构#
前面我们已经了解了手机结构的基本操作之插入操作以及删除操作我们都知道单链表的基本操作,包括插入操作,删除操作,查找操作,建立操作。现在,我们将来学习单链表的查找操作。
零基础Python数据结构教程、源码及视频淘宝¥2购买已下架单链表的查找操作分为按位查找和按值查找。而在按位查找当中,我们只讨论带头节点的情况。
(1)按位查找操作指的是获取单链表L中的元素的值。
(2)按值查找操作指的是在单链表L中查找具有所给定关键字值的元素。
简而言之,按位查找操作,就是根据位置找元素的值,就是找到一个位置,再看看坐在这个位置上的是哪个人。而按值查找操作就是根据这个数值来找到具有关这个关键数值的一个元素。也就是相当于根据某个物件来寻找具有该物件的拥有者。
(1)按位查找示例代码
LNode*getelem(linklistL,inti)
{ if(i0) returnNULL: //将头节点当作第0个节点,i值小于0时,单链表表示为空,不存储数据元素值
LNode*p; //指针p指向当前扫描到的结点
Intj=0; //当前P指向的是第几个结点
p=L; //L指向头结点,头结点是第0个结点(不存数据)
while(p!=NULLji) //循环找到第i个结点
{ p=p-next; j++; }//进行循环扫描,逐个指向节点
Returnp; } //执行成功,返回p
考虑i值不同的情况:
①当i=0时,指针p指向头节点,而头节点不存储数据元素,单链表为空;
②假设单链表可以存储八个数据元素,那么当指针扫描时,则会进入while循环,直到满足指针指向的位置为空或是指向位置超出单链表的范围时,退出循环;
③当i为普通情况时,指针p也将扫描进入到while循环,所拥有的平均时间复杂度为O(n)。
由以上代码可以看出,在我们进行插入操作和删除操作的时候,都需要进行查找的操作。而对于此处,其实就相当于对操作进行封装,避免代码冗余,占用大量不必要的空间,同时维护起来比较方便。
(2)按值查找示例代码
LNode*Locatelem(linklistL,elemtypee)
{ LNode*p=L-next; 从第1个结点幵始查找数据域为e的结点
While(p!=NULLp-data!=e) p=p-next; //扫描数值为空或是扫描到数值非所需数值则继续扫描
Returnp; } //找到后返回该结点指针,否则返回NULL
考虑能否找到的情况:
①当可以找到e的数值时,指针p将会一直扫描,直到扫描到数值e时停止,并保存数值e到指针中,返回数值;
②当无法找到e的数值时,指针p将会一直扫描,直到扫描完整个单链表,若未扫描到对应数值则表示扫描失败。
③按值查找的时间复杂度为O(n)。