单链表专题详解

⽬录
1. 链表的概念及结构
2. 实现单链表
3. 链表的分类
一.链表的概念及结构
概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表
中的指针链接次序实现的 。
那有的同学会有疑问,这个火车车厢里面会装些啥呢?
又是怎样像通过挂钩一样把各节火车联系起来的呢?

哈哈,让我猜猜大家是不是像钵钵鸡一样的表情啊?

闲话不多说,直接进入正题:

大家可以想象一下这样一种情景:假如火车每一个车间之间都有一个上了锁的门,我们想要把下一个门打开(也就是相当于将车厢连接在一起),我们这个门里面是不是要存在下一个门得钥匙,这样我们才能够将门打开。(补充:如果这个车厢但这个存储了它前面和它后面这两个门的钥匙,它可能就是我们后面将要学习的双向链表了。)由此,我们可以知道,这个车厢(也就是这个单链表)里面存储了它所想存储的数据外,还有下一个车厢(链表)的地址。(**最后一个链表指向的地址尾NULL)

宝子们可以看看下图:

与顺序表不同的是,链表⾥的每节"⻋厢"都是独⽴申请下来的空间,我们称之为“结点/节点” 节点的组成主要有两个部分:当前节点要保存的数据和保存下⼀个节点的地址(指针变量)。 图中指针变量 plist保存的是第⼀个节点的地址,我们称plist此时“指向”第⼀个节点,如果我们希
望plist“指向”第⼆个节点时,只需要修改plist保存的内容为0x0012FFA0。
为什么还需要指针变量来保存下⼀个节点的位置?
链表中每个节点都是独⽴申请的(即需要插⼊数据时才去申请⼀块节点的空间),我们需要通过指针变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点。
每个节点对应的结构体代码:
那我们应该如何打印链表呢?
以下三点是在链表当中需要注意的地方:
1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续
2、节点⼀般是从堆上申请的
3、从堆上申请来的空间,是按照⼀定策略分配出来的,每次申请的空间可能连续,可能不连续
二.单链表的实现
SList.h
SList.c
大家别被这一些代码吓到了,他们其实就是纸老虎,只要你搞懂了其中的一个,其他的都不成问题了。
接下来我以尾插为例子:
大家思考一下,我们应该如何将图一变成图二呢?
思路: 假设数字3处的地址是phead (需要用一个初始指针pcur遍历所有链表找到,即while(pcur!=NULL) ),4的地址是newhead,则我们需要将phead->next=newhead,同时,newhead->next=NULL;  传的指针为空的时候要另外讨论;
接下来看看实现的代码:
尾插是基础,学会了这个大家就可以自己动手尝试一下写以下代码啦!
test.c
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值