单链表的介绍

链表是一种常见的线性数据结构,用于存储一系列元素。它由一系列节点组成,每个节点包含两部分:数据域和指针域。其中,数据域用于存储元素的值,指针域用于指向下一个节点。

单链表的特点包括:

  1. 节点组成:单链表由多个节点组成,每个节点包含数据和指向下一个节点的指针。
  2. 头指针:单链表通常有一个头指针,指向链表的第一个节点。
  3. 尾节点指针:有些单链表会有一个尾节点指针,指向链表的最后一个节点,方便在尾部进行插入操作。
  4. 动态内存分配:单链表的节点在内存中可以动态分配,不需要连续的内存空间,因此可以方便地进行插入和删除操作。
  5. 灵活性:由于单链表的节点之间使用指针连接,因此可以根据需要在链表中间插入或删除节点,而不需要移动其他节点。

与顺序表一样,单链表也是一种线性表;和顺序表不同,链表在逻辑上连续,在物理上不连续。

如下:

单链表的实现:

1.与实现顺序表一样,创建SList.c  Slist.h  test.c  三个文件

.h用来包含实现方法所需的头文件以及所需方法的初始化。

test.c用来测试代码是否出错

.c用来实现各种方法

2.定义节点的结构:

实现链表的节点需要创建两个变量:数据域和指针域,利用结构体来是实现

利用typedef将struct SListNode简化为SLTNode。

3.方法声明:实现该链表所需头文件以及各种方法的声明

方法实现:在SList.c中对需要的方法进行实现。

顺序表的实现需要初始化并申请一块内存,而链表却不需要,这是因为链表存储的空间并不是连续的。

实现链表的功能:

1.打印

在main方法里实现即可

2.尾插:

在链表的插入操作中,我们需要修改的是当前节点的指针,需要传址调用。如果我们只传递指向当前节点的指针,那么在函数内部修改指针的值只会传值调用,而不会影响调用者传递给函数的原始指针。故就是二级指针(传址调用),修改当前节点指针。

测试:

头插的实现:

将赋值后的newnode的下一个节点赋给pphead,这样newnode就成为了新的头指针。

查找:

创建新节点pcur ,遍历,如果当前节点符合,返回,否则继续,若最后未找到,返回NULL

    测试:
    

在指定位置之前插入数据:

pos之前插入,将newnode节点指向pos,将prev->next指向newnode

在指定位置之后插入数据:

删除指定位置的节点:

删除指定位置之后的数据

销毁链表:

遍历链表,next接收pcur的下一个节点,之后释放pcur后,将保存的next再赋给pcur,简而言之,创建一个第三方节点保存数据,让后遍历释放。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值