【数据结构】- 单链表

先创建好SList.c、Test.c两个源文件和SList.h一个头文件。

SList.c和Test.c一样

4ccd5f6981ca485c843443729ddb27ba.png

SList.h 文件

e3202111356b48089776ed992a5427b3.png

 

 

在SList.h加上

63f41876892744a4b086d1bd063fa7d9.png

 

1.单链表打印

SList.h

612180c6eb974a81be5bc111c3daa6bc.png

 

SList.c

0df05f35ae59486eae48557f26272327.png

思路:

逻辑图(之后经常用到):

81b5e92123134b9b93e0aa0d28797b8e.png

物理图:

ef9ab6102b6740158af8582cadb5a945.png

 

为了方便运行Test.c中的运行还要在SList.h写一个造节点的函数。

2.造节点的函数

SList.h

4441b665b93244f6b455ed55e0ebca83.png

 

SList.c

7beef9e1aa5548a28fccd01868d44573.png

 

Test.c

ef1eb52ee82e434b94e575079a0e8fa8.png

 

因为要把一个个节点给链接起来(先写头插)

思路:

物理图才是真正的内核

047be3648f4f448bb3db3164aeb0a8b3.png

b010ae043a3143bdb00a1d38c75cc123.png

 

 因为要头插Test.c要改成

f8fb99148ae3490fb3bf12e96fae826c.png

425f374737e34940b0f78ade3e8c458a.png

 

 运行结果:

aaf0080e6f154cde8554c194b4ae7ecf.png

如果改为尾插会是正序的。

 

如果想在链表中进行尾插

3.单链表的尾插

SList.h

e5b31d635cb44d49819af1ed0f3d0b5f.png

 

思路:

这里有个经典错误值得提一下

7a102f118d944d76ad47759f7246bca7.png

逻辑图不好理解,看看物理图

e1025b8a912e459e836a586c77fb2dfb.png

966074998be74544897d75055b1333c3.png

3c5bb22925ae43e2b152a8d17018b423.png

24b9aec9ca4b40a38f0efe769483fa4b.png

SList.c

bd1a8915d7e04b3bbc931b1bee7d2a52.png

 

 

这两个代码天差地别 

 eb9cb09303064d7ebe967a5b137bea70.png

Test.c

e1efeebb0bf24da0ae47b20b8eeb9368.png

 425f374737e34940b0f78ade3e8c458a.png

运行结果:

eba1bb578133471493fbaf7ab5513ee3.png

 7f67ba5c39d24470a6bafaa4473cfce1.png

 我们已经折腾出来了一个链表往链表里边加数据

 

有没有一种可能性一开始没有节点链表该怎么走?

假设SList.c

e67f6a62ac164307a37c740caba4abfa.png

 Test.c

e3d6b7dbf294474a810d338abfb8f441.png

6601649d1b074986b54a987190c0a71b.png

运行结果:

e78f82fe866e4ceb893a2dfbc36f16a4.png

为什么呢? 

 这是一个大坑大伙都要跳一遍的

f400d99cf298468786193f1ce8858ca9.png

 

原因也很好理解 

形参改变不会影响实参

9e2b7a005a3f4ba4a92dadef63aa3a2d.png

0c2a967985c2481787bc8af4947adda3.png

 26775e37610341daad7f02ac69831dc5.png

进入前 

bd8ee25d0c5f4ef59d725cb918a4df5c.png

交换后

d50b5a8ff63f46ccb06178a5bffb2807.png

 所以我们要进行修改

Slist.h进行修改

67b8e849514a423b901bff68ff0209b0.png

 

SList.c进行修改

1f172570a82348b5894e7a3f088d951f.png

 

Test.c进行修改

 5320ecbd43d64275a6275ded951b72f5.png

 6601649d1b074986b54a987190c0a71b.png

 运行结果:

7d865588f15a44268523fa73c4b51468.png

 本质理解

2361f44f9ae247be838e5d1f0260e36b.png

 

 4.单链表的头插

 思路:

8b6f2e4f6c9e449d9eb1e9ee1a6a8346.png

SList.h

7138285769cd4c7dbdb251d3dc0d27a0.png

SList.c

b305d36306e44ae09fa606268781863b.png

 

Test.c 

 c67223860259438498196e827f2846a2.png

 运行结果:

855c85cfd393435a923e2c6c3dad54a5.png

 

5. 单链表的尾删

SList.h

216edc07d7f14957bd13ae5936cbdc8c.png

思路: 

bbadf3cd12c642adb1ff045d3ba8b622.png

*pphead就是plist 

SList.c

9c8b87fc0414445da483862e0216fab1.png

b3e059f957e94a9086543076e967de0d.png

 

这里有个经典错误

e9f622f5faed4cfdacb47ce0f889406b.png

正确思路是

cb6e7ec6665a4f00b49c57a16273b93e.png

Test.c

bd3ef685894c44848fc0939dd02605e1.png

 

运行结果

f295b2a096704c0ca66691a33afb4226.png

 

6. 单链表头删

SList.h

36594dbd1147434fa32955401d2de653.png

 

思路:

7999979eaa7e497daacb1de5cc345669.png

 

SList.c

a4f8663eb68d4c16838e543f151a7407.png

 

Test.c

aac6ff39207b4d55a20af6508e421295.png

 

运行结果:

e22418a7ca9a45b0944039f666302b4a.png

 

7. 单链表查找

SList.h

SList.c

Test.c

运行结果

8. 在pos之前插入x

SList.h

SList.c

Test.c

运行结果

9. 单链表在pos位置之后插入x

SList.h

SList.c

Test.c

运行结果

10. 删除pos位置

SList.h

SList.c

Test.c

运行结果

11. 单链表删除pos位置之后的值

SList.h

SList.c

Test.c

运行结果

12. 单链表的销毁

SList.h

SList.c

Test.c

运行结果

 

 

 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

No more cages

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

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

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

打赏作者

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

抵扣说明:

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

余额充值