没有头结点的单链表
没有头结点的单链表
0.引言 这段代码定义了一个单链表及其相关操作,主要包括以下功能:1. 定义单链表的数据类型和结点结构;2. 动态申请内存创建链表结点;. 实现单链表的插入、删除、查等基本操作;4. 使用头插和尾插法动态调整链表;5. 打印单链表;6. 在指定位置之后插入元素;7. 删除指定位置之后的元素。通过这些操作,代码展示了如何使用单链表进行数据存储和操作。在实际应用中,可以根据需求
没有头结点的单链表
这段代码定义了一个单链表及其相关操作,主要包括以下功能:
1. 定义单链表的数据类型和结点结构;
2. 动态申请内存创建链表结点;
. 实现单链表的插入、删除、查等基本操作;
4. 使用头插和尾插法动态调整链表;
5. 打印单链表;
6. 在指定位置之后插入元素;
7. 删除指定位置之后的元素。
通过这些操作,代码展示了如何使用单链表进行数据存储和操作。在实际应用中,可以根据需求进一步扩展和完善链表的操作功能。
typedef int SLTDateType; // 定义单链表的数据类型
typedef struct SListode // 定义单链表的结点结构
{
SLTDateType data; // 数据域
struct SListode* next; // 指针域,指向下一个结点
}SListode;
// 动态申请一个结点
SListode* BuySListode(SLTDateType x)
{
SListode* newnode = (SListode*)malloc(sizeof(SListode)); // 分配内存空间
if (newnode == ULL) // 检查内存分配是否成功
{
perror("malloc");
}
newnode->data = x; // 初始化数据域
newnode->next = ULL; // 初始化指针域
return newnode; // 返回新结点的地址
}
// 单链表打印
void SListPrint(SListode* plist)
{
while (plist != ULL)
{
printf("%d->", plist->data); // 打印当前结点的数据
plist = plist->next; // 移动到下一个结点
}
printf("ULL"); // 打印链表结束标志
}
// 单链表尾插
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; // 将新结点接在最后一个结点之后
}
}
// 单链表的头插
void SListPushFront(SListode** pplist, SLTDateType x)
{
SListode* newnode = BuySListode(x); // 创建新结点
if ((*pplist) == ULL) // 如果链表为空
{
*pplist = newnode; // 新结点成为头结点
}
else // 如果链表非空
{
newnode->next = (*pplist); // 将头结点连接在新结点之后
(*pplist) = newnode; // 新结点成为新的头结点
}
}
// 单链表的尾删
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; // 防止产生野指针
}
// 单链表头删
void SListPopFront(SListode** pplist)
{
assert(*pplist); // 检查链表非空
SListode* cur = *pplist; // 保存头结点的地址
*pplist = cur->next; // 头结点指向下一个结点
free(cur); // 释放原头结点的内存
cur = ULL; // 防止产生野指针
}
// 单链表查
SListode* SListFind(SListode* plist, SLTDateType x)
{
while (plist) // 遍历链表
{
if (plist->data == x) // 到目标值
{
return plist; // 返回到的结点的地址
}
else // 继续搜索下一个结点
{
plist = plist->next;
}
}
}
// 单链表在pos位置之后插入x
void SListInsertAfter(SListode* pos, SLTDateType x)
{
SListode* newnode = BuySListode(x); // 创建新结点
newnode->next = pos->next; // 将新结点连接到pos结点之后
pos->next = newnode; // 将pos结点的next指针指向新结点
}
// 单链表删除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组装电脑配置单推荐报价格
上传时间: 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 删除前往查看数据数据类型指针链表内存 |