Day2 数据结构(2)
今天学习了数据结构中的链表中的单向链表在学习中主要有以下几点困难地方1.对于指针来操作一些结构体还是不太熟练比如在练习单向链表中的对数据进行倒序的时候指针指向结构体不太清楚还有访问结构体里面的指针的时候指向节点不清楚导致程序报错。2.对链表的操作还是有点不清楚一些原理还是晦涩难懂接下来要着重去记忆吃透。3.往后学习越来越难时间上越来越不够用了要精打细扣时间来学习了下面是一些常用的单向链表操作着重是创建链表头插入删除销毁倒序排序#include linklist.h #include string.h #include stdlib.h #include stdio.h /*************************************** *函数名:CreateEmptyLinkList *功能: * 创建一个包含头结点的空链表 *参数: * 缺省 *返回值: * 成功返回创建的空白节点的地址 * 失败返回NULL **************************************/ Node_t *CreateEmptyLinkList(void) { Node_t *pTmpNode NULL; pTmpNode malloc(sizeof(Node_t)); if (NULL pTmpNode) { printf(malloc failed\n); return NULL; } pTmpNode-pNext NULL; return pTmpNode; } /*************************************** *函数名:InsertHeadLinkList *功能: * 头插法 *参数: * pTmpList: 链表头结点地址 * TmpData: 要插入的数据 *返回值: * 成功返回0 * 失败返回-1 **************************************/ int InsertHeadLinkList(Node_t *pTmpList, DataType TmpData) { Node_t *pTmpNode NULL; //1.申请空间 pTmpNode malloc(sizeof(Node_t)); if (NULL pTmpNode) { printf(malloc failed\n); return -1; } //2.将data赋值 pTmpNode-Data TmpData; //3.将pNext赋值 pTmpNode-pNext pTmpList-pNext; //4.头节点的pNext指向申请的节点 pTmpList-pNext pTmpNode; return 0; } /*************************************** *函数名:IsEmptyLinkList *功能: * 是否为空链表 *参数: * pTmpList: 链表头结点地址 *返回值: * 为空返回1 * 不为空返回0 **************************************/ int IsEmptyLinkList(Node_t *pTmpList) { return pTmpList-pNext NULL ? 1 : 0; } /*************************************** *函数名:ShowLinkList *功能: * 显示链表中所有元素 *参数: * pTmpList: 链表头结点地址 *返回值: * 缺省 **************************************/ void ShowLinkList(Node_t *pTmpList) { Node_t *pTmpNode NULL; pTmpNode pTmpList-pNext; while (pTmpNode ! NULL) { printf(%d , pTmpNode-Data); pTmpNode pTmpNode-pNext; } printf(\n); return; } /*************************************** *函数名:ReplaceLinkList *功能: * 替换链表中的旧值更新为新值 *参数: * pTmpList: 链表头结点地址 * OldData:旧数据 * NewData:新数据 *返回值: * 成功返回 更新元素个数 * 失败返回 -1 **************************************/ int ReplaceLinkList(Node_t *pTmpList, DataType OldData, DataType NewData) { Node_t *pTmpNode NULL; int cnt 0; pTmpNode pTmpList-pNext; while (pTmpNode ! NULL) { if (pTmpNode-Data OldData) { pTmpNode-Data NewData; cnt; } pTmpNode pTmpNode-pNext; } return cnt; } /*************************************** *函数名:FindLinkList *功能: * 在链表中查找指定元素 *参数: * pTmpList: 链表头结点地址 * TmpData:要找的元素 *返回值: * 成功返回找到元素节点的地址 * 失败或者没有找到返回NULL **************************************/ Node_t *FindLinkList(Node_t *pTmpList, DataType TmpData) { Node_t *pTmpNode NULL; Node_t *pRetNode NULL; pTmpNode pTmpList-pNext; while (pTmpNode ! NULL) { if (pTmpNode-Data TmpData) { pRetNode pTmpNode; break; } pTmpNode pTmpNode-pNext; } return pRetNode; } /*************************************** *函数名:DeleteLinkList *功能: * 删除链表中的元素 *参数: * pTmpList: 链表头结点地址 * TmpData:要删除的元素 *返回值: * 成功返回 删除元素的个数 * 失败或者没有找到 0 **************************************/ int DeleteLinkList(Node_t *pTmpList, DataType TmpData) { Node_t *pTmpNode NULL; Node_t *pPreNode NULL; int cnt 0; pTmpNode pTmpList-pNext; pPreNode pTmpList; while (pTmpNode ! NULL) { if (pTmpNode-Data TmpData) { pPreNode-pNext pTmpNode-pNext; free(pTmpNode); pTmpNode pPreNode-pNext; cnt; } else { pTmpNode pTmpNode-pNext; pPreNode pPreNode-pNext; } } return cnt; } /*************************************** *函数名:DestroyLinkList *功能: * 销毁链表中所有节点元素 *参数: * pTmpList: 存放链表头结点的指针变量地址 *返回值: * 缺省 **************************************/ void DestroyLinkList(Node_t **ppTmpList) { Node_t *pTmpNode NULL; Node_t *pFreeNode NULL; pTmpNode pFreeNode (*ppTmpList); while (pTmpNode ! NULL) { pTmpNode pTmpNode-pNext; free(pFreeNode); pFreeNode pTmpNode; } *ppTmpList NULL; return; } /*************************************** *函数名:FindMidLinkList *功能: * 快速找到链表中间节点 *参数: * pTmpList: 存放链表头结点的指针变量地址 *返回值: * 成功返回中间节点的地址 **************************************/ Node_t *FindMidLinkList(Node_t *pTmpList) { Node_t *pFast NULL; Node_t *pSlow NULL; pFast pSlow pTmpList-pNext; while (pFast ! NULL) { pFast pFast-pNext; if (NULL pFast) { break; } pFast pFast-pNext; pSlow pSlow-pNext; } return pSlow; } /*************************************** *函数名:FindLastKthLinkList *功能: * 快速找到链表倒数第k个节点 *参数: * pTmpList: 存放链表头结点的指针变量地址 * Kth:倒数第几个节点 *返回值: * 成功返回节点的地址 **************************************/ Node_t *FindLastKthLinkList(Node_t *pTmpList, int Kth) { Node_t *pFast NULL; Node_t *pSlow NULL; int i 0; pFast pSlow pTmpList-pNext; for (i 0; i Kth pFast ! NULL; i) { pFast pFast-pNext; } if (NULL pFast) { return NULL; } while (pFast ! NULL) { pFast pFast-pNext; pSlow pSlow-pNext; } return pSlow; } /*************************************** *函数名:DeleteNode *功能: * 已知链表中间节点地址删除中间节点 *参数: * pTmpNode: 要删除的数据节点 *返回值: * 成功返回0 **************************************/ int DeleteNode(Node_t *pTmpNode) { Node_t *pFreeNode NULL; pFreeNode pTmpNode-pNext; pTmpNode-Data pFreeNode-Data; pTmpNode-pNext pFreeNode-pNext; free(pFreeNode); pFreeNode NULL; return 0; } /*************************************** *函数名:ReverseLinkList *功能: * 单向链表完成倒置 *参数: * pTmpList: 链表头结点地址 *返回值: * 成功返回0 **************************************/ int ReverseLinkList(Node_t *pTmpList) { Node_t *pTmpNode NULL; Node_t *pInsertNode NULL; pTmpNode pTmpList-pNext; pTmpList-pNext NULL; while (pTmpNode ! NULL) { pInsertNode pTmpNode; pTmpNode pTmpNode-pNext; pInsertNode-pNext pTmpList-pNext; pTmpList-pNext pInsertNode; } return 0; } /*************************************** *函数名:BubbleSortLinkList *功能: * 单向链表的冒泡排序 *参数: * pTmpList: 链表头结点地址 *返回值: * 成功返回0 **************************************/ int BubbleSortLinkList(Node_t *pTmpList) { Node_t *pTmpNode1 NULL; Node_t *pTmpNode2 NULL; Node_t *pEnd NULL; DataType TmpData; if (NULL pTmpList-pNext || NULL pTmpList-pNext-pNext) { return 0; } while (pEnd ! pTmpList-pNext-pNext) { pTmpNode1 pTmpList-pNext; pTmpNode2 pTmpNode1-pNext; while (pTmpNode2 ! pEnd) { if (pTmpNode1-Data pTmpNode2-Data) { TmpData pTmpNode1-Data; pTmpNode1-Data pTmpNode2-Data; pTmpNode2-Data TmpData; } pTmpNode1 pTmpNode1-pNext; pTmpNode2 pTmpNode2-pNext; } pEnd pTmpNode1; } return 0; }

相关新闻

TKMyBatis实战指南:告别重复CRUD,提升MyBatis开发效率

TKMyBatis实战指南:告别重复CRUD,提升MyBatis开发效率

1. 项目概述:为什么我们需要TKMyBatis? 如果你用MyBatis做过几个项目,尤其是那种表结构复杂、实体类众多的后台管理系统,你大概率会和我有一样的感受:写SQL是爽,但写那些重复的增删改查(CRUD&am…

2026/8/15 8:48:08 阅读更多 →
告别LaTeX表格手工编码:超强工具实现图形化设计与代码自动生成

告别LaTeX表格手工编码:超强工具实现图形化设计与代码自动生成

1. 项目概述:告别LaTeX表格的“手工活” 如果你用过LaTeX排版,尤其是写过论文、技术报告或者书籍,那你一定对制作表格这件事又爱又恨。爱的是它最终呈现出的那份严谨、精致和专业感,恨的是在代码编辑器里手动调整 \hline 、 \m…

2026/8/15 8:48:08 阅读更多 →
LFM2.5-VL-3B:轻量级视觉语言模型在边缘AI部署的实战指南

LFM2.5-VL-3B:轻量级视觉语言模型在边缘AI部署的实战指南

最近在尝试将视觉AI能力部署到边缘设备时,遇到了一个经典难题:如何在资源受限的硬件上,既保证模型识别的精度,又能满足实时性的要求?大模型效果好但跑不动,小模型速度快但精度不够,这个平衡点一…

2026/8/15 8:47:08 阅读更多 →

最新新闻

JavaScript函数编程:从基础到高阶实战指南

JavaScript函数编程:从基础到高阶实战指南

1. JavaScript函数:从基础到实战的完整指南 作为一名前端开发者,我经常被问到如何真正掌握JavaScript函数。函数是JavaScript编程的核心概念,但很多初学者往往停留在基础语法层面,无法灵活运用。今天,我将分享一套完整…

2026/8/15 9:33:26 阅读更多 →
奇点大会后的安全攻防,AI系统怎么建防御纵深

奇点大会后的安全攻防,AI系统怎么建防御纵深

从传统安全到AI原生威胁:防御思维的范式转换 奇点智能技术大会2026上,AI安全议题的分量明显加重。当模型能力持续突破,攻击面也在同步扩张——对抗样本能让自动驾驶识别失效,模型窃取可在几轮查询中复制核心能力,而供…

2026/8/15 9:33:26 阅读更多 →
奇点大会的多模态讨论,内容产品团队怎么跟进

奇点大会的多模态讨论,内容产品团队怎么跟进

从大会热词到产品落地:多模态能力如何嵌入内容生产 奇点智能技术大会2026的多模态议题,对内容产品团队来说不是"要不要跟进"的问题,而是"怎么避免踩坑"的问题。文生图、图生视频这些能力听起来性感,真正落地…

2026/8/15 9:33:26 阅读更多 →
网页完整保存实战指南:从PDF到爬虫的5种方案与避坑技巧

网页完整保存实战指南:从PDF到爬虫的5种方案与避坑技巧

1. 网页保存的“完整”之困与破局思路 干了这么多年技术,处理过无数网页存档的需求,从产品经理要留个竞品快照,到法务部门要求证据保全,再到自己写博客想做个离线备份。我发现一个挺普遍的现象:很多人以为点了浏览器的…

2026/8/15 9:33:26 阅读更多 →
从奇点大会看TinyML,端侧智能的落地门槛在哪

从奇点大会看TinyML,端侧智能的落地门槛在哪

TinyML 不是「小模型」那么简单 在奇点智能技术大会的边缘智能分论坛上,TinyML 被反复提及,但讨论焦点早已不是「能不能在 MCU 上跑神经网络」这种初级阶段的问题。真正让嵌入式工程师和 AI 架构师头疼的是:模型压缩到何种程度,业…

2026/8/15 9:33:26 阅读更多 →
Wireshark 3.6.3 Windows安装与配置全指南:从零抓包到实战分析

Wireshark 3.6.3 Windows安装与配置全指南:从零抓包到实战分析

1. 项目概述:为什么我们需要Wireshark?如果你是一名网络工程师、安全研究员,或者是一名对计算机底层通信充满好奇的开发者,那么Wireshark这个名字你一定不陌生。它被誉为“网络世界的显微镜”,是迄今为止最强大、最流行…

2026/8/15 9:32:26 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →