单链表的初始化

文章详细介绍了单链表的存储结构,包括带头结点和不带头结点的初始化方法。对于不带头结点的链表,初始化为空表时,头指针设为NULL。带头结点的链表在初始化时会创建一个不包含数据的头结点,并将其next指针设为NULL。同时,提供了判断链表是否为空的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单链表初始化

单链表的存储结构

typedef int ElemType;
typedef struct LNode {
	ElemType data;
	struct LNode* next;//指向下一个结点 
}LNode, * LinkList;    //分别取两个别名的目的是使代码的可读性更强

/*
*	LNode* L : 声明指向一个结点的指针,强调是一个结点
*	LinkList L : 声明指向单链表的指针,强调是一个单链表
*	两者等价,区别只是为了使代码可读性更强。
*为什么单链表和结点的存储结构一样?
*因为要表示一个单链表的时候,只需要声明一个头指针L,指向单链表的第一个结点。
*所以单链表的存储结构实际上也是一个结点,因此存储结构一样。
*/

初始化

1、不带头结点的单链表

//初始化一个不带头结点的空单链表
bool InitList(LinkList &L)
{
	L = NULL;	//设置为NULL的目的是防止随机分配的脏数据。
	return true;
}
/*
*当初始化不带头结点的单链表时,L为单链表的头指针,指向第一个结点
*不带头结点的单链表初始化为空表的时候,没有结点,则让头指针为空
*
*另:参数是一个引用类型,否则改变的不是单链表L,而是单链表L的一个副本。
*/


//判断单链表是否为空
bool Empty(LinkList L){
	if(L == NULL)
		return true;
	else
		return false;
}

2、带头结点的单链表

//初始化一个带头结点的单链表
bool InitList(LinkList &L){
    L = (LNode *)malloc(sizeof(LNode));		//需要头结点,初始化的时候在堆中分配一个头结点大小的空间,此时L指向头结点
    if (L==NULL)		//内存不足,分配失败
        return false;
    L->next = NULL;
    return true;
}
/*
*当初始化有头结点的单链表时,头指针L就指向头结点,头结点也被称作"第0个结点",不带数据,不被记录为链表的长度
*
*顺序表一般都定义成静态的,由系统自动回收空间,不需要malloc和free
*当然也可以定义为动态数组,在堆中分配一块空间,需要手动malloc和free
*单链表一般都是定义在堆中,需要malloc和free
*/

//判断带头结点的单链表是否为空
bool Empty(LinkList L){
    if (L->next == NULL)
        return true;
    else
        return false;
}
//判空的方面对比不带头结点的单链表,非常好理解
带头结点与不带头结点的初始化内存图如下所示

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

封心心心心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值