单链表详解

一.概念

1.结点/节点概念:

单/双链表与顺序结构存在差异,每个节点都是独立申请下来的空间,于是每一个节点之间相互独立,就像火车的每一节车厢,无论增加或减少都对其他车厢没有影响.

节点的组成主要有两个部分:当前节点要保存的数据和保存下⼀个节点的地址(指针变量)。

有一个例子是这么说的,假设火车列车员手中只能拿一个钥匙,而每个车厢之间的门都处于上锁状态,那么列车员应该如何通过每一节车厢呢?

最简单的答案是:将当通往下一节车厢的钥匙留在该车厢.这也就是节点中保存下一个节点地址的原因---我们需要通过指针变量来从当前节点找到下⼀个节点.

你可能会问,按前面的例子来说,每一个车厢后跟着的不就是下一个车厢吗,保存地址这么做有什么意义呢?那么让我们继续往后看~

2.链表概念:

链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,一般分为单链表和双链表(双链表将在下一篇文章中进行详细分享)。

看到这个概念你是否能解答上一个问题了呢?

链表中的数据在保存时并非像火车车厢一样的顺序结构,随机存放正是它的特点,正因为如此,我们需要上一个节点来为我们指路,才能让我们在内存中找到下一个节点的位置.接下来让我们深入了解单链表吧.

1.单链表概念

单链表(无头单向非循环链表):结构简单,⼀般不会单独⽤来存数据。实际中更多是作为其他数据结构的子结构.

单链表是一种数据结构,用于存储一系列的元素。它由一系列的节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。简单来讲,单链表类似于我们生活中的单程票,仅支持去往目的地,不支持返程.

2.特点

单链表的特点是只能在表头进行插入和删除操作,而不支持随机访问。

二.插入操作

当在单链表的表头插入一个新节点:

  1. 创建一个新的节点,并将新节点的数据元素设置为要插入的元素。
  2. 将新节点的指针指向原表头节点。
  3. 将新节点设为新的表头节点。

三.删除操作

当在单链表中删除一个节点:

  1. 找到要删除的节点的前一个节点。
  2. 将前一个节点的指针指向要删除节点的下一个节点。
  3. 删除要删除的节点。

操作总结引用如下: 

typedef int SLTDataType;
typedef struct SListNode
{
 SLTDataType data; //节点数据 
 struct SListNode* next; //指针保存下⼀个节点的地址 
}SLTNode;
void SLTPrint(SLTNode* phead);
//头部插⼊删除/尾部插⼊删除 
void SLTPushBack(SLTNode** pphead, SLTDataType x);
void SLTPushFront(SLTNode** pphead, SLTDataType x);
void SLTPopBack(SLTNode** pphead);
void SLTPopFront(SLTNode** pphead);
//查找 
SLTNode* SLTFind(SLTNode* phead, SLTDataType x);
//在指定位置之前插⼊数据 
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);
//删除pos节点 
void SLTErase(SLTNode** pphead, SLTNode* pos);
//在指定位置之后插⼊数据 
void SLTInsertAfter(SLTNode* pos, SLTDataType x);
//删除pos之后的节点 
void SLTEraseAfter(SLTNode* pos);
//销毁链表 
void SListDesTroy(SLTNode** pphead);

 

四.优势

单链表的优点是插入和删除操作的时间复杂度低,为O(1),但是查找一个节点的时间复杂度为O(n),需要遍历整个链表

单链表常用于需要频繁插入和删除节点的场景,例如实现队列、栈等数据结构.

今日分享到此结束,期待明天再见!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值