C语言中链表结构的基本用法

链表是我们在编程时十分常用的一种基础数据结构。它不仅可以动态的进行存储分配,也可以根据实际的需要在每一个节点中定义多种数据类型,存储多种多样的数据。同时,链表结构也能实现根据需要随意添加,删除,插入,修改节点等操作,有着较高的灵活性和泛用性。既然说了这么多链表的优势,那么接下来,就让我来简单的介绍一下C语言中,链表要如何实现吧!

链表的基本结构

链表正如其名,是一种通过指针,像链条一样将要存储的数据节点一个接一个的连接,从而进行存储的数据结构。一般来说,我们在使用链表时都需要有一个头指针,通常可以以head来表示。它存放的是一个地址。而链表中每个节点又都分为两部分,一个数据域,一个是指针域。通常在创建链表时我们需要定义一个形如下图的结构体。

其中的变量a是数据域,我们可以根据需要设置任意数量与类型的数据来让链表存储。而下面的*next则是实现链表的关键,指针域,它指向的是链表中的下一个节点。在链表中,我们可以把节点分为两类,头节点和一般节点,头节点是没有数据域的,它的地址由头指针head来存储。于是,head指向第一个节点:第一个节点又指向第二个节点;……,直到最后一个节点为止,该节点将不再指向其它节点,它称为“表尾”,既一个链表中的最后一个数据。它的*next中存放的是“NULL”(表示“空地址”)。至此,一个简单的链表结构便形成了。

链表的基础功能

作为有强大功能的链表,可对它执行的操作当然有许多。在这里我将会介绍最为基础的创建链表,插入节点,删除节点等功能的实现。

1

创建链表

作为建立链表结构的基础,构造包含数据域和指针域的结构体自然是必不可少的步骤。(这在上面已经说过了,所以不再赘述。)但构造完结构体还只是开始,在创建一个链表时,我们还不能忘了要为其分配空间。链表作为一种特殊的数据结构,可以动态存储数据是它的一大优势,而为了实现这一点,我们在创建新链表时,就不得不主动为其分配空间。C语言中,为了动态分配内存空间,我们可以调用头文件,“malloc.h”中的动态内存分配函数malloc来实现。分配完所需空间,再对头结点中数据域与指针域赋初值。至此,创建一个新链表的流程便完成了。下面是我自己编写的一个简单的创建链表函数。

2

插入节点

对链表执行插入节点的操作,简单来说,就是用插入节点前一个节点的指针域链接上插入节点的数据域,再把插入节点的指针域链接上插入节点后一个节点的数据域。根据下图,所要进行的操作也就是:e->next = head->next; head->next = e;

因此,我们在插入节点时,只需创建好要插入的节点,然后按上图中的方式插入即可。下面是我写的一个将节点插入至所选位置的函数。

3

删除节点

删除链表的节点,也就是要把前节点的指针域越过要删除的节点指向下下个节点。如下图中,即:p->next = q->next;然后放出q节点的空间,即free(q);

所以,在删除链表中节点时,我们要做的就是找到要删除节点的前一个节点在哪里,改变该节点指针域,使其指向下下个节点,然后释放删除节点的空间便大功告成了。下面是一个简单的删除节点函数。

编辑 | 李兴业

排版 | 李兴业

审核 | 庄一鸣

长按下方二维码关注我们

每进步一点点

都想与你同在

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181104G01VXF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券