您现在的位置是:首页 > 编程 > 

没有头结点的单链表

2025-07-28 14:54:28
没有头结点的单链表 0.引言 这段代码定义了一个单链表及其相关操作,主要包括以下功能:1. 定义单链表的数据类型和结点结构;2. 动态申请内存创建链表结点;. 实现单链表的插入、删除、查等基本操作;4. 使用头插和尾插法动态调整链表;5. 打印单链表;6. 在指定位置之后插入元素;7. 删除指定位置之后的元素。通过这些操作,代码展示了如何使用单链表进行数据存储和操作。在实际应用中,可以根据需求

没有头结点的单链表

0.引言

这段代码定义了一个单链表及其相关操作,主要包括以下功能:

1. 定义单链表的数据类型和结点结构;

2. 动态申请内存创建链表结点;

. 实现单链表的插入、删除、查等基本操作;

4. 使用头插和尾插法动态调整链表;

5. 打印单链表;

6. 在指定位置之后插入元素;

7. 删除指定位置之后的元素。

通过这些操作,代码展示了如何使用单链表进行数据存储和操作。在实际应用中,可以根据需求进一步扩展和完善链表的操作功能。


1.节点的定义代码语言:javascript代码运行次数:0运行复制
typedef int SLTDateType; // 定义单链表的数据类型

typedef struct SListode // 定义单链表的结点结构
{
	SLTDateType data; // 数据域
	struct SListode* next; // 指针域,指向下一个结点
}SListode;

2.动态申请一个结点 代码语言:javascript代码运行次数:0运行复制
// 动态申请一个结点
SListode* BuySListode(SLTDateType x)
{
	SListode* newnode = (SListode*)malloc(sizeof(SListode)); // 分配内存空间

	if (newnode == ULL) // 检查内存分配是否成功
	{
		perror("malloc");
	}

	newnode->data = x; // 初始化数据域
	newnode->next = ULL; // 初始化指针域

	return newnode; // 返回新结点的地址
}

.单链表打印代码语言:javascript代码运行次数:0运行复制
// 单链表打印
void SListPrint(SListode* plist)
{
	while (plist != ULL)
	{
		printf("%d->", plist->data); // 打印当前结点的数据
		plist = plist->next; // 移动到下一个结点
	}
	printf("ULL"); // 打印链表结束标志
}

4.单链表尾插代码语言:javascript代码运行次数:0运行复制
// 单链表尾插
void SListPushBack(SListode** pplist, SLTDateType x)
{
	SListode* newnode = BuySListode(x); // 创建新结点

	if ((*pplist) == ULL) // 如果链表为空
	{
		*pplist = newnode; // 新结点成为头结点
	}
	else // 如果链表非空
	{
		SListode* cur = (*pplist);
		while (cur->next) // 到链表的最后一个结点
		{
			cur = cur->next;
		}
		cur->next = newnode; // 将新结点接在最后一个结点之后
	}
}

5.单链表的头插代码语言:javascript代码运行次数:0运行复制
// 单链表的头插
void SListPushFront(SListode** pplist, SLTDateType x)
{
	SListode* newnode = BuySListode(x); // 创建新结点

	if ((*pplist) == ULL) // 如果链表为空
	{
		*pplist = newnode; // 新结点成为头结点
	}
	else // 如果链表非空
	{
		newnode->next = (*pplist); // 将头结点连接在新结点之后
		(*pplist) = newnode; // 新结点成为新的头结点
	}
}

6.单链表的尾删代码语言:javascript代码运行次数:0运行复制
// 单链表的尾删
void SListPopBack(SListode** pplist)
{
	assert(*pplist); // 检查链表非空

	SListode* cur = *pplist;

	while (((cur->next)->next) != ULL) // 到倒数第二个结点
	{
		cur = cur->next;
	}

	SListode* cur1 = cur->next; // 记录最后一个结点的地址
	cur->next = ULL; // 倒数第二个结点的next指针置空
	free(cur1); // 释放最后一个结点的内存
	cur1 = ULL; // 防止产生野指针
}

7.单链表头删代码语言:javascript代码运行次数:0运行复制
// 单链表头删
void SListPopFront(SListode** pplist)
{
	assert(*pplist); // 检查链表非空

	SListode* cur = *pplist; // 保存头结点的地址
	*pplist = cur->next; // 头结点指向下一个结点
	free(cur); // 释放原头结点的内存
	cur = ULL; // 防止产生野指针
}

8.单链表查代码语言:javascript代码运行次数:0运行复制
// 单链表查
SListode* SListFind(SListode* plist, SLTDateType x)
{
	while (plist) // 遍历链表
	{
		if (plist->data == x) // 到目标值
		{
			return plist; // 返回到的结点的地址
		}
		else // 继续搜索下一个结点
		{
			plist = plist->next;
		}
	}
}

9.单链表在pos位置之后插入x代码语言:javascript代码运行次数:0运行复制
// 单链表在pos位置之后插入x
void SListInsertAfter(SListode* pos, SLTDateType x)
{
	SListode* newnode = BuySListode(x); // 创建新结点
	newnode->next = pos->next; // 将新结点连接到pos结点之后
	pos->next = newnode; // 将pos结点的next指针指向新结点
}

10.单链表删除pos位置之后的值代码语言:javascript代码运行次数:0运行复制
// 单链表删除pos位置之后的值
void SListEraseAfter(SListode* pos)
{
	if (pos->next == ULL) // 判断pos位置之后是否有结点
	{
		printf("pos位置后没有值");
	}
	else // 如果有结点
	{
		SListode* cur = pos->next; // 保存要删除的结点的地址
		pos->next = cur->next; // 将pos结点的next指针跳过要删除的结点
		free(cur); // 释放要删除的结点的内存
		cur = ULL; // 防止产生野指针
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent 删除数据数据类型指针链表内存

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1261976.html

相关标签:无
上传时间: 2025-07-28 09:26:48

上一篇:数组相关面试题

下一篇:双向循环链表

留言与评论(共有 12 条评论)
本站网友 金坛租车
6分钟前 发表
代码展示了如何使用单链表进行数据存储和操作
本站网友 东阿租房
15分钟前 发表
查等基本操作;4. 使用头插和尾插法动态调整链表;5. 打印单链表;6. 在指定位置之后插入元素;7. 删除指定位置之后的元素
本站网友 广东省人民医院预约
0秒前 发表
SLTDateType x) { SListode* newnode = BuySListode(x); // 创建新结点 newnode->next = pos->next; // 将新结点连接到pos结点之后 pos->next = newnode; // 将pos结点的next指针指向新结点 }10.单链表删除pos位置之后的值代码语言:javascript代码运行次数:0运行复制// 单链表删除pos位置之后的值 void SListEraseAfter(SListode* pos) { if (pos->next == ULL) // 判断pos位置之后是否有结点 { printf("pos位置后没有值"); } else // 如果有结点 { SListode* cur = pos->next; // 保存要删除的结点的地址 pos->next = cur->next; // 将pos结点的next指针跳过要删除的结点 free(cur); // 释放要删除的结点的内存 cur = ULL; // 防止产生野指针 } }本文参与 腾讯云自媒体同步曝光计划
本站网友 催乳食谱
15分钟前 发表
通过这些操作
本站网友 博客程序
19分钟前 发表
查等基本操作;4. 使用头插和尾插法动态调整链表;5. 打印单链表;6. 在指定位置之后插入元素;7. 删除指定位置之后的元素
本站网友 氨甲环酸
13分钟前 发表
删除
本站网友 酒泉酒店
21分钟前 发表
在实际应用中
本站网友 宫颈息肉图片
24分钟前 发表
SLTDateType x) { SListode* newnode = BuySListode(x); // 创建新结点 if ((*pplist) == ULL) // 如果链表为空 { *pplist = newnode; // 新结点成为头结点 } else // 如果链表非空 { newnode->next = (*pplist); // 将头结点连接在新结点之后 (*pplist) = newnode; // 新结点成为新的头结点 } }6.单链表的尾删代码语言:javascript代码运行次数:0运行复制// 单链表的尾删 void SListPopBack(SListode** pplist) { assert(*pplist); // 检查链表非空 SListode* cur = *pplist; while (((cur->next)->next) != ULL) // 到倒数第二个结点 { cur = cur->next; } SListode* cur1 = cur->next; // 记录最后一个结点的地址 cur->next = ULL; // 倒数第二个结点的next指针置空 free(cur1); // 释放最后一个结点的内存 cur1 = ULL; // 防止产生野指针 }7.单链表头删代码语言:javascript代码运行次数:0运行复制// 单链表头删 void SListPopFront(SListode** pplist) { assert(*pplist); // 检查链表非空 SListode* cur = *pplist; // 保存头结点的地址 *pplist = cur->next; // 头结点指向下一个结点 free(cur); // 释放原头结点的内存 cur = ULL; // 防止产生野指针 }8.单链表查代码语言:javascript代码运行次数:0运行复制// 单链表查 SListode* SListFind(SListode* plist
本站网友 优是
11分钟前 发表
如有侵权请联系 cloudcommunity@tencent 删除前往查看数据数据类型指针链表内存
本站网友 揪耳朵
2分钟前 发表
SLTDateType x) { SListode* newnode = BuySListode(x); // 创建新结点 if ((*pplist) == ULL) // 如果链表为空 { *pplist = newnode; // 新结点成为头结点 } else // 如果链表非空 { newnode->next = (*pplist); // 将头结点连接在新结点之后 (*pplist) = newnode; // 新结点成为新的头结点 } }6.单链表的尾删代码语言:javascript代码运行次数:0运行复制// 单链表的尾删 void SListPopBack(SListode** pplist) { assert(*pplist); // 检查链表非空 SListode* cur = *pplist; while (((cur->next)->next) != ULL) // 到倒数第二个结点 { cur = cur->next; } SListode* cur1 = cur->next; // 记录最后一个结点的地址 cur->next = ULL; // 倒数第二个结点的next指针置空 free(cur1); // 释放最后一个结点的内存 cur1 = ULL; // 防止产生野指针 }7.单链表头删代码语言:javascript代码运行次数:0运行复制// 单链表头删 void SListPopFront(SListode** pplist) { assert(*pplist); // 检查链表非空 SListode* cur = *pplist; // 保存头结点的地址 *pplist = cur->next; // 头结点指向下一个结点 free(cur); // 释放原头结点的内存 cur = ULL; // 防止产生野指针 }8.单链表查代码语言:javascript代码运行次数:0运行复制// 单链表查 SListode* SListFind(SListode* plist
本站网友 中药黄氏
16分钟前 发表
如有侵权请联系 cloudcommunity@tencent 删除前往查看数据数据类型指针链表内存