单链表的查找

单链表的查找

① 链表不是随机存取结构

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

② 查找的思想方法

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

注意:
 头结点可看做是第0个结点。
单链表的查找分为两种

1.按位查找

GetElem(L,i) :按位查找操作,获取L中第i个位置的元素的值
在这里插入图片描述

ListInsert(LinkList &L ,int i, ElemType e){
    if(i < 1)
        return false;
    LNode *p;      //指针p指向当前扫描到的节点
    int j = 0;     //当前p指向的是第几个节点
    p = L;         //L指向头结点,头结点是第0个节点
while(p != NULL && j < i-1){ //循环找到第i-1个节点
    p = p -> next;
    j++;
}
if(p == NULL)
    return false;
LNode *s = (LNode *) malloc (sizeof(LNode));
s -> data = e;
s -> next = p -> next;
p -> next = s;
return true;
}
LNode * GetElem(LinkList L, int i){
	if(i < 0)
		return NULL;
	LNode *p;   //指针p指向当前扫描到的节点
	int j = 0;  //当前p指向的事第几个节点
	p = L;      //L指向头结点,头结点是第o个节点
	while (p != NULL && j < i){  //循环找到第i个节点
		p = p -> next;
		j++;
	}
	retuen p;
}

2.按值查找

LocateElem(L,e): 按值查找操作,在表L中查找具有给定关键字的元素

//按值查找,找到数据域== e 的结点
LNode * LocateElem(LinkList L,ElemType e){
	LNode *p = L -> next;
	//从第一个结点开始查找新数据与为e的结点
	while(p != NULL && p -> data != e)
		p = p -> next;
	return p;  //找到后返回该结点指针,否则返回NULL
}

3.求表的长度

//求表的长度
int Length(LinkList L){
	int len = 0;   //统计表长
	LNode *p = L;
	while(p -> next != NULL){
		p = p -> next;
	}
	return len;
}

在这里插入图片描述

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羊 : )

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值