【数据结构】线性表的链式存储——单链表(C语言版)

本文详细介绍了线性表的链式存储结构——单链表,阐述了单链表的定义、特点,特别是头指针和头结点的概念。并深入探讨了如何在C语言中实现单链表的基本操作,包括创建、插入、删除、查找、打印和销毁等操作,是理解数据结构中链表概念的好材料。

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

一.基本概念

1.定义

线性表的链式存储又称单链表。通过一组任意的存储单元存储线性表中的数据元素,每个链表结点不仅存放数据,还会存放一个指向下一结点的指针。
在这里插入图片描述

2.特点

1.单链表解决了顺序表需要大量连续的存储空间的缺点,而单链表附加了指针域,存在着空间浪费的缺点。
2.离散分布,不能随机读取。
3.在查找特定结点时,只能从表头开始遍历;对于添加或删除元素的操作,只需要改变指针,而不用移动大量元素。

关于头指针和头结点

在这里插入图片描述
头结点:数据域不含任何信息,指针与指向首元素结点。
头指针:无论链表是否含有头结点,头指针都指向链表的第一个结点。
有头结点的链表,其第一个结点就是头结点;没有头结点的链表,其第一个结点是首元素结点。

头结点的好处:线性表中,只有首元素结点没有直接前驱,加入头结点后,使首元素也有了直接前驱,进而让线性表中所有元素的操作的到了统一。

二.单链表基本操作的实现

单链表的结构:

typedef int SLTDataType;
typedef struct SListNode
{
   
   
	SLTDataType data;
	struct SListNode* next;
}SLTNode;

1.创建新结点

SLTNode* Buynewnode(SLTDataType x)
{
   
   
	SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
	if(newnode == NULL)//检查是否maollc成功。
	{
   
   
		perror("maollc fail");//若maollc失败程序就会中断。
		exit(-1);
	}
	//程序能够走到这里说明maollc成功。
	newnode->data = x;
	newnode->next = NULL;
	return newnode;//返回存放着新结点地址的结构体指针
}

2.创建单链表

SLTNode* CreateSList(int n)//创建一个单链表
{
   
   
	SLTNode* phead = NULL, * ptail = NULL;
	for (int i = 0; i < n; i++)
	{
   
   
		SLTNode* newnode = BuySLTNode(i);
		if (phead == NULL)
		{
   
   
			ptail = phead = newnode
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值