c语言单链表的查找,单链表的查找、建立操作(C语言)

一、单链表的查找(带头结点)

(一)按位查找

GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。

//按位查找,返回第i个元素(带头结点)

LNode * GetElem(LinkList L, int i){

if(i<0)

return NULL;

LNode *p;//指针p指向当前扫描到的结点

int j=0;//当前p指向的是第几个结点

p = L;//L指向头结点,头结点是第0个结点(不存储数据)

while(p != NULL && j

p =p -> next;

j++;

}

return p;

}

边界情况:

①如果 i = 0

38d60005ecc3a712a428d48139c53dfd.png

②如果 i = 8

527819da48b86a8536cd03ce60854506.png

(二)按值查找

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

//按值查找,找到数据域==e 的结点

LNode * LocateElem(LinkList L,ElemType e){

LNode *p = L -> next;

//从第1个结点开始查找数据域为e的结点

while(p != NULL && p -> data != e)

p = p -> next;

return p;//找到后返回该结点指针,否则返回NULL

}

①、如果e=8:

1132075654308fa1a028ba0b0ff4de58.png

②、如果e=6:

5470f31ae06280855eaca8682dfc77dd.png

1. 求表的长度

//求表的长度

int Length(LinkList L){

int len = 0;//统计表长

LNode *p = L;

while(p -> next != NULL){

p = p -> next;

len++;

}

return len;

}

二、单链表的建立

(一)尾插法

尾插法建立单链表:

①、初始化单链表。

②、设置变量length记录链表长度

while循环{

每次取一个数据元素e;

ListInsert(L,length+1,e)插到尾部;

length++;

}

尾插法建立单链表

//在第i个位置插入元素e(带头结点)

bool 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

p = p->next;

j++;

}

if(p == NULL)//i值不合法

return false;

LNode *s = (LNode *)malloc(sizeof(LNode));

s -> data = e;

s -> next = p -> next;

p -> next = s;//将结点s连接到p之后

return true;//插入成功

}

fa1237860f9c85d22f353076b20315b8.png

通过设置尾指针减少时间复杂度

c7a3c2f6c6100b88f4da761cdac188f1.png

LinkList List_TailInsert(LinkList &L){//正向建立单链表

int x;//设ElemType为整型

L = (LinkList)malloc(sizeof(LNode));//建立头结点

LNode *s,*r = L;//r为表尾指针

scanf("%d",&x);//输入结点的值

while(x != 9999){

s = (LNode *)malloc(sizeof(LNode));

s -> data = x;

r -> next = s;

scanf("%d",&x);

}

r -> next = NULL;//尾结点指针置空

return L;

}

926db61338fe37155b2703dda76a4a84.png

df74b859bb90477b1f79a17df6e21b18.png

(二)头插法

重要应用:链表的逆置

LinkList List_HeadInsert(LinkList &L){//逆向建立单链表

LNode *s;

int x;

L = (LinkList)malloc(sizeof(LNode));//创建头结点

L -> next = NULL;//初始为空链表

标签:结点,单链,LNode,next,LinkList,查找,C语言

来源: https://blog.csdn.net/qq_44096670/article/details/116138449

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值