电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

单链表的查找运算


发布日期:2021/7/4
 

单链表的查找运算

)按序号查找

① 链表不是随机存取结构

在链表中即使知道被访问结点的序号i也不能像顺序表中那样直接按序号i访问结点而只能从链表的头指针出发顺链域next逐个结点往下搜索直至搜索到第i个结点为止因此链表不是随机存取结构

② 查找的思想方法

计数器j置为扫描指针p指针从链表的头结点开始顺着链扫描当p扫描下一个结点时计数器j相应地加当j=i时指针p所指的结点就是要找的第i个结点而当p指针指为null且j≠i时则表示找不到第i个结点

注意

头结点可看做是第个结点

③具体算法实现

ListNode* GetNode(LinkList headint i)

{//在带头结点的单链表head中查找第i个结点若找到(≤i≤n)

//则返回该结点的存储位置否则返回NULL

int j;

ListNode *p;

p=head;j=;//从头结点开始扫描

while(p>next&&j<i){//顺指针向后扫描直到p>next为NULL或i=j为止

p=p>next;

j++;

}

if(i==j)

return p;//找到了第i个结点

else return NULL;//当i<或i>找不到第i个结点

}

④算法分析

算法中while语句的终止条件是搜索到表尾或者满足j≥i其频度最多为i它和被寻找的位置有关在等概率假设下平均时间复杂度为

) 按值查找

①思想方法

从开始结点出发顺着链逐个将结点的值和给定值key作比较若有结点的值与key相等则返回首次找到的其值为key的结点的存储位置否则返回NULL

②具体算法实现

ListNode* LocateNode (LinkList headDataType key)

{//在带头结点的单链表head中查找其值为key的结点

ListNode *p=head>next;//从开始结点比较表非空p初始值指向开始结点

while(p&&p>data!=key)//直到p为NULL或p>data为key为止

p=p>next;//扫描下一结点

return p;//若p=NULL则查找失败否则p指向值为key的结点

}

③算法分析

该算法的执行时间亦与输入实例中key的取值相关其平均时间复杂度分析类似于按序号查找为O(n)

上一篇:第10章文件习题练习答案

下一篇:树、森林与二叉树的转换