【数据结构】——手撕单链表(流程图+代码版)

本文详细介绍了单链表的概念,强调了链表在物理存储上的非连续性和逻辑上的连续性。文章重点讲解了无头单向非循环链表的应用场景,并详细阐述了单链表的增删查改操作,包括打印、创建新节点、头插、头删、尾插、尾删、销毁、查找、插入和删除等关键接口的实现。对于每个操作,都解释了其必要性和实现原理。
摘要由CSDN通过智能技术生成

目录

🐏一、链表介绍

🐏二、单链表的实现

2.1 应用环境

2.2 单链表的接口实现——增删查改

(1)打印

(2)创造新的节点

(3)头插

(4)头删

(5)尾插

(6)尾删

(7)销毁

(8)查找

(9)在pos之前插入

(10)在pos后面插入

(11)删除pos位置

(12)删除pos后面位置


🐏一、链表介绍

    链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的 。(下图为链式结构的手画简图)

 

 但是有三个注意点

1.链式结构在逻辑上是连续的,但在物理上不一定连续

2.现实中的结点一般从堆上申请出来

3.从对上申请的空间,是按照一定的策略来分配的,两次申请的空间,可能连续,也可能不连续


🐏二、单链表的实现

2.1 应用环境

       无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结 构的子结构,如哈希桶、图的邻接表等等。

2.2 单链表的接口实现——增删查改

typedef int SLTDataType;

typedef struct SListNode
{
       SLTDataType data;
       struct SListNode* next;//这里不能漏写struct,因为此处还没有缩写完成
}SLTNode;

(1)打印

打印的过程其实就是遍历的过程,一个一个访问。

void SListPrint(SLTNode* phead)
{
       //phead是空的很正常,所以此处不用断言
       SLTNode* cur = phead;//将phead赋给cur,是怕后期在遍历过程中找不到头
       while (cur != NULL)
       {
              printf("%d->", cur->data);
              cur = cur->next;
       }
       printf("NULL");
}

(2)创造新的节点

Q:为什么要单独写一段代码创造节点?

A:   在局部定义的话,出了作用域就会自动销毁

SLTNode* BuySLTNode(SLTDataType x)
{
       SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
       if (newnode == NULL)
       {
              perror("malloc fail");
              return -1;
       }
       newnode->data = x;
       newnode->next = NULL;
       
       return newnode;
}<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值