用C语言实现一个链表(一)

用C语言实现一个链表(一)

一、准备工作

1.何为链表?

在前两期内容中,我们介绍了顺序表,和顺序表一样,链表也是一种线性表(具有相同特性的数据元素的有限序列),即逻辑结构连续。不同的是,链表的物理存储结构是不连续的,它的逻辑顺序通过指针链接次序来实现。如图所示:
链表结构
链表的每一个小单元就称为一个结点
链表的结构有很多种,非常灵活:

(1)单向或者双向

单向或者双向

(2)带有头结点或者不带头结点

带有头结点或者不带头结点

(3)循环或者非循环

循环或者非循环
本期内容将为大家介绍的是单链表的C语言实现,后面还会给大家介绍双向循环链表。

2.实现一个链表,我们需要些什么?

(1)data

data是指节点存储的数据,称为结点的数据域,其类型通过typedef来灵活定义。

(2)指针

结点除了存放数据之外,还要留有指向下一个结点的指针,称为指针域,通常被命名为next。

(3)结构体

一个结点中包含数据域和指针域,我们可以将它们放入一个结构体中,如图:
链表结构体
要注意的是,虽然struct是数据类型,但它和int,float这些内置类型不同,它是自定义类型,在写指针变量时,int型指针使用int*,double型指针使用double* 即可,但结构体指针要带上自己定义的名字struct LinkNode*,因为结构体的种类是有很多的,只有在struct后面加上名字,才知道是指向的哪种结构体,现在是struct LinkNode*,说明next指向的是下一个结构相同的结构体,而不是别的什么结构体。

二、链表的实现(代码+分析)

顺序表的核心是数组,链表的核心是指针。在创建一个链表前,我们应定义一个指针,先将其置为空指针(NULL),然后再通过对应的函数,使其指向一个存储数据的新结点。我们实现的是不带哨兵位头结点的链表,也就是说第一个节点就要存储数据。

int main()
{
   
	LinkNode* plist = NULL;
		
	return 0;
}

1.创建新结点

创建一个新节点,需要开辟一个空间,可以使用动态内存开辟的方式向堆区申请,创建的新结点数据域为需要添加的数据,指针域为空,因此函数只要提供需要添加的数据即可。如图所示,创建的新节点是单独在外的,并没有和链表链接,至于如何链接,取决于怎样插入链表中,后面会有对应的函数来实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值