数据结构之单链表(c语言版)

本文详细探讨了单链表的初始化、插入、删除等操作,包括带头结点和不带头结点的区别。讲解了typedef如何简化类型定义,并提供了常见链表操作的代码示例,如按位序插入、删除节点等。强调了带头结点在实际操作中的优势,以及在处理链表末尾节点时的注意事项。
摘要由CSDN通过智能技术生成

单链表

在这里插入图片描述

关于typedef与结构体
在这里插入图片描述
此时的LNode *等价于LinkList
上下两种效果相同
上面解释
相当于
*LinkList=LNode(LinkList取值是LNode)
也就是LinkList=struct LNode *p(LinkList是结构体的指针)

在这里插入图片描述

不同的对应用于上面位置最好

初始化一个单链表

不带头结点

在这里插入图片描述

带头结点

在这里插入图片描述

两者间区别

一般用带头结点的
在这里插入图片描述

小结

在这里插入图片描述

单链表的插入删除

按位序插入

带头结点版

在这里插入图片描述

LNode *p=L;
int j=0;
while(p!=NULL&&j<i-1){		
	p=p->next;
	j++;
	}

这行代码在链表操作很常用,用于查找对应的第i-1个节点

不带头结点版

在这里插入图片描述
i=1时与其他操作不同
由于没有头结点,只有一个指针
所以插入到第一个位置时候
新的结构体

s->data=e;
s->next=L;
L=s;

实现链表的连接

指定节点的后插操作

在这里插入图片描述

指定节点后插操作

在这里插入图片描述
逆天!
!!!把数据互换!!!

按位序删除

带头节点版

在这里插入图片描述

指点节点的删除

在这里插入图片描述
还是与后面的一个节点的数据交换,然后删除我们新建的节点(因为我们不能直接得到前面的节点然后指向后面的删除节点后面的节点)
所以我们把对应节点的数据删除即可,把后面的数据提到完想要删除的节点内,然后然删除节点指向后两个节点
最后free(删除节点的后一个节点)
这样就完成了指定节点的删除

但是!!!
这样写是有bug的,如果p节点是最后一个节点就会出现空指针异常
这样我们就只能从表头依次找对应p的前驱

小总结

在这里插入图片描述

单链表的查找(带头节点)

按位查找

在这里插入图片描述

按值查找

在这里插入图片描述

求表的长度

在这里插入图片描述

单链表的建立

带头节点版本
在这里插入图片描述

尾插法

插入的数据都是最后一个元素
在这里插入图片描述

输入9999结束
r永远指向表尾

头插法

插入的永远在第一个元素
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小袁拒绝摆烂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值