当前位置: 首页 > article >正文

线性结构之链表[基于郝斌课程]

每个结点只有一个前续结点每个结点只有一个后续结点首结点没有前续结点尾结点没有后续结点专业术语首结点第一个有效结点存放第一个有效数据尾结点最后一个有效结点存放最后一个有效数据头结点在首结点之前的一个结点既不存放有效数据也不存放有效结点的个数加头结点的主要目的是为了方便对链表的操作头结点的数据类型和其他结点的数据类型是一样的头指针指向头结点的指针变量存放了头结点的地址尾指针指向尾结点的指针变量存放了尾结点的地址确定一个链表至少需要哪些参数只需要一个参数头指针因为我们通过头指针就可以推出链表的其他所有信息链表的分类单链表每一个结点只有一个指针域双链表每一个结点有两个指针域循环链表能通过任何一个结点找到其他所有的结点非循环链表优缺点优点空间没有限制插入删除元素很快缺点存取速度很慢算法狭义的算法是与数据存储方式密切相关的广义的算法与数据存储方式无关泛型你用某种技术达到的效果就是不同的存储方式执行的操作是一样的/* file main.c brief 线性结构之链表 author EricsT (EricsT163.com) version v1.0.0 date 2025-09-21 history 2025-09-21 EricsT - 新建文件 2025-09-22 EricsT - 新增 CreateList\TraverseList 2025-09-22 EricsT - 新增 isEmptyList\GetLenthList\InsertList\DeleteList\SortList */ #include stdio.h #include malloc.h #include stdlib.h typedef struct Node { int data;//数据域 Node* ptrNext;//指针域 }* PtrNode, NODE;//NODE 相当于 Node NODE//ptrNode 相当于 Node* ptrNode PtrNode CreateList();//创建链表 void TraverseList(const PtrNode ptrNode);//遍历链表 bool isEmptyList(const PtrNode ptrNode);//是否为空 int GetLenthList(const PtrNode ptrNode);//获取链表长度 bool InsertList(PtrNode ptrNode, int insertPos, int insertData);//插入结点 bool DeleteList(PtrNode ptrNode, int deletePos);//删除结点 void SortList(PtrNode ptrNode);//排序 int main(void) { PtrNode ptrNode NULL; ptrNode CreateList(); TraverseList(ptrNode); if (isEmptyList(ptrNode)) printf(链表为空\n); else printf(链表非空\n); printf(链表长度为%d\n, GetLenthList(ptrNode)); int insertPose; printf(请输入插入位置); scanf(%d, insertPose); int insertValue; printf(请输入插入数值); scanf(%d, insertValue); InsertList(ptrNode, insertPose, insertValue); TraverseList(ptrNode); int deletePose; printf(请输入删除位置); scanf(%d, deletePose); DeleteList(ptrNode, deletePose); TraverseList(ptrNode); SortList(ptrNode); TraverseList(ptrNode); return 0; } PtrNode CreateList() { int len; printf(请输入结点个数len ); scanf(%d, len); int addr 0; PtrNode ptrNodeFirst (PtrNode)malloc(sizeof(NODE));//头结点 if (NULL ptrNodeFirst) { printf(分配失败\n); exit(-1); } PtrNode ptrNodeLast ptrNodeFirst;//尾结点 ptrNodeLast-ptrNext NULL; for (int i 0; i len; i) { PtrNode ptrNode (PtrNode)malloc(sizeof(PtrNode));//新的尾结点 if (NULL ptrNodeFirst) { printf(分配失败\n); exit(-1); } ptrNodeLast-ptrNext ptrNode;//新的尾结点挂在旧的尾结点后面 printf(请输入%d个结点的数值, i 1); scanf(%d, ptrNode-data); ptrNode-ptrNext NULL; ptrNodeLast ptrNode;//更新尾结点 } return ptrNodeFirst; } void TraverseList(const PtrNode ptrNode/*头结点*/) { PtrNode ptrNode_ ptrNode-ptrNext;//首节点 while (NULL ! ptrNode_)//结点为空则是尾结点 { printf(%d , ptrNode_-data); ptrNode_ ptrNode_-ptrNext;//下一结点 } printf(\n); } bool isEmptyList(const PtrNode ptrNode) { PtrNode ptrNode_ ptrNode-ptrNext;//首节点 if (NULL ptrNode-ptrNext) return true; return false; } int GetLenthList(const PtrNode ptrNode) { int iLen 0; PtrNode ptrNode_ ptrNode-ptrNext;//首节点 while (NULL ! ptrNode_)//结点为空则是尾结点 { ptrNode_ ptrNode_-ptrNext;//下一结点 iLen; } return iLen; } bool InsertList(PtrNode ptrNode, int insertPos, int insertData) { if (insertPos 1) return false; if (insertPos (GetLenthList(ptrNode) 1)) return false; PtrNode ptrNodeInsert (PtrNode)malloc(sizeof(Node)); ptrNodeInsert-data insertData; PtrNode ptrNodeCur ptrNode; for (int i 1; i insertPos; i) ptrNodeCur ptrNodeCur-ptrNext; ptrNodeInsert-ptrNext ptrNodeCur-ptrNext; ptrNodeCur-ptrNext ptrNodeInsert; return true; } bool DeleteList(PtrNode ptrNode, int deletePos) { if (deletePos 1) return false; if (deletePos GetLenthList(ptrNode)) return false; PtrNode ptrNodeCur ptrNode; for (int i 1; i deletePos; i) ptrNodeCur ptrNodeCur-ptrNext; ptrNodeCur-ptrNext ptrNodeCur-ptrNext-ptrNext; return true; } void SortList(PtrNode ptrNode) { int iLen GetLenthList(ptrNode); PtrNode ptrNodeCur ptrNode;//头结点 for (int i 0; i iLen; i) { ptrNodeCur ptrNodeCur-ptrNext; PtrNode ptrNodeNext ptrNodeCur-ptrNext; while (NULL ! ptrNodeNext) { if (ptrNodeCur-data ptrNodeNext-data) { int temp ptrNodeCur-data; ptrNodeCur-data ptrNodeNext-data; ptrNodeNext-data temp; } ptrNodeNext ptrNodeNext-ptrNext; } } }

相关文章:

线性结构之链表[基于郝斌课程]

每个结点只有一个前续结点每个结点只有一个后续结点首结点没有前续结点尾结点没有后续结点专业术语:首结点:第一个有效结点,存放第一个有效数据尾结点:最后一个有效结点,存放最后一个有效数据头结点:在首结…...

电商网站SEO网站结构应该如何设计

电商网站SEO网站结构设计的关键点 在当今数字化时代,电商网站的成功离不开搜索引擎优化(SEO)。一个精心设计的网站结构不仅能提升网站的用户体验,还能大大提高在搜索引擎上的排名。电商网站SEO网站结构应该如何设计呢&#xff1f…...

OpenClaw未来展望:Qwen3-14B与本地自动化的5个进化方向

OpenClaw未来展望:Qwen3-14B与本地自动化的5个进化方向 1. 从工具到伙伴:OpenClaw的现状与定位 去年冬天,当我第一次在本地MacBook上部署OpenClaw时,它还是个需要手动配置JSON文件才能调用本地模型的"半成品"。如今看…...

SEO优化对网站收录有什么作用

SEO优化对网站收录有什么作用 在当今互联网信息爆炸的时代,网站的收录问题显得尤为重要。SEO优化对于网站的收录有着至关重要的作用,无论是对于新开的网站还是已经运营一段时间的网站,优化都能为其带来更多的流量和潜在客户。SEO优化对网站收…...

揭秘冷轧精密带钢DC03-C340:3大核心特性如何赋能精密制造?

朋友们,今天咱们不聊虚的,就聊聊工厂车间里最实在的东西——材料。你是不是也遇到过这样的烦心事:花大价钱买回来的钢带,一上冲床就开裂,废品率居高不下;或者热处理后表面出现诡异的蓝线,抛光怎…...

寒冬降临:当资本撤出AI测试赛道

2026年初,全球资本市场对AI技术的狂热投资骤然降温。随着VC基金转向更保守的资产配置,依赖融资的AI测试工具开发商面临生存危机:初创公司批量裁员,开源项目停止维护,企业采购的智能测试平台因无法续约沦为“断线木偶”…...

LeetCode 热题100——3.无重复字符的最长子串

题目: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab&qu…...

vue3 diff算法中的-双端 Diff + 最长递增子序列 讲解

一句话总结 Vue3 Diff 双端比较(快速复用) 最长递增子序列(最小移动 DOM) 目的:在乱序节点中,只移动最少 DOM,实现最高效更新。1. 先搞懂:Vue3 对比 Vue2 差在哪? Vue2…...

AI报告文档审核助力本地化升级:IACheck如何支撑食品加工行业数据安全与质量协同发展

在食品加工行业不断强化质量控制与数据安全要求的背景之下,“本地部署”正逐渐成为企业数字化转型中的关键路径之一,尤其是在涉及检测数据与质量报告的场景中,数据不仅需要具备高度准确性,还必须满足合规与安全要求,因…...

PWM技术原理与工程实践全解析

1. PWM技术基础解析脉冲宽度调制(PWM)作为现代电子电力控制的核心技术,其本质是通过调节脉冲信号的导通时间比例来实现对功率的有效控制。我第一次接触这个概念是在调试直流电机调速项目时,当时被其精妙的设计思想所震撼。1.1 关键…...

OpenClaw自动化周报:Qwen3.5-9B解读工作截图生成总结

OpenClaw自动化周报:Qwen3.5-9B解读工作截图生成总结 1. 为什么需要自动化周报 每周五下午,我都会陷入一种"周报焦虑"——电脑桌面上堆满了会议截图、临时记录的txt文件、微信里的零散对话。手动整理这些碎片信息需要3-4个小时,常…...

Kubernetes中的ConfigMap与Secret:安全高效管理配置的终极指南

引言:云原生时代的配置困境 在传统的运维模式中,配置往往硬编码在镜像中,或通过环境变量散落在各处。随着微服务架构的普及,这种模式带来了“配置漂移”、镜像臃肿、敏感信息泄露等痛点。 Kubernetes 通过 ConfigMap 和 Secret …...

电源管理入门-12 clock驱动

电源管理的两个大方面就是电压和时钟。 Clock 时钟就是 SoC 中的脉搏,由它来控制各个部件按各自的节奏跳动。比如,CPU主频设置,串口的波特率设置,I2S的采样率设置,I2C的速率设置等等。这些不同的clock设置,…...

3D元器件库在PCB设计中的关键作用与应用

1. 为什么你需要一套完整的3D元器件库作为一名电子工程师,我深知在PCB设计过程中,3D元器件库的重要性。传统的2D设计虽然能满足基本需求,但在实际生产装配时往往会遇到各种意想不到的机械干涉问题。记得我刚开始做硬件设计时,就曾…...

IT行业的项目经理考不考PMP证书?我劝你看完这篇在决定!

作为在 IT 圈摸爬滚打 8 年,从后端开发一路转型项目经理、带过 10 大小项目的老学长,最近总被身边技术小伙伴追问:想转 PM,必须考 PMP 吗?没证书就做不好项目管理吗?今天就用过来人的经验,跟大…...

2026年4月OpenClaw怎么集成?腾讯云6分钟超简单安装步骤

2026年4月OpenClaw怎么集成?腾讯云6分钟超简单安装步骤。OpenClaw(原Clawdbot)作为2026年主流的AI自动化助理平台,可通过阿里云轻量服务器实现724小时稳定运行,并快速接入钉钉,让AI在企业群聊、个人工作流中…...

UCI心脏病数据集实战:用XGBoost构建预测模型的全流程指南(附特征重要性分析)

UCI心脏病数据集实战:用XGBoost构建预测模型的全流程指南(附特征重要性分析) 医疗数据科学正在重塑现代医学诊断方式。当我在克利夫兰诊所实习期间,亲眼见证了机器学习模型如何辅助医生识别高风险心脏病患者。本文将带您完整复现这…...

青铜器RDM研发管理平台

我们深耕研发管理服务20余年,依托 10 余年研发管理实战经验,累计为超 10000 家企业提供专业培训、为200 余家企业深度咨询,打造完全自主知识产权的研发管理数字化平台 —— 青铜器 RDM。以 IPD、CMMI、Scrum、PMBOK 等业界最佳实践为内核&…...

S03TodoWrite - 任务规划:没有计划的 Agent 会迷失方向

核心理念 “没有计划的 Agent 走哪算哪” – 先列步骤再动手,完成率翻倍。 源码:https://github.com/xiayongchao/learn-claude-code-4j/blob/main/src/main/java/org/jc/agents/S03TodoWrite.java原版:https://github.com/shareAI-lab/lea…...

等保.三级要求下Redis 安全测评应该怎么做?

1. 引入 在现代 AI 工程中,Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的,官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为,最好的办法…...

Neosegment库:面向七段数码管式NeoPixel的嵌入式驱动框架

1. Neosegment库概述:面向七段数码管式NeoPixel模块的嵌入式驱动框架Neosegment是一个专为Neosegment Digit模块设计的Arduino兼容嵌入式驱动库,其核心目标是将WS281x/SK6812系列智能LED的底层时序控制与七段数码管(7-segment display&#x…...

2026届学术党必备的十大AI写作助手推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 知网AIGC检测服务的目的是辅助识别学术文本里由人工智能生成的内容,该技术凭借对…...

嵌入式系统调试实战:工具、技巧与内存管理

1. 嵌入式调试的核心价值与挑战从事嵌入式开发十多年来,我深刻体会到调试环节往往决定着项目的成败。与桌面软件开发不同,嵌入式系统一旦部署后很难进行现场维护,这就要求我们必须在上线前解决所有潜在问题。根据行业统计,嵌入式工…...

2025最权威的十大AI学术神器推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于人工智能生成内容也就是AIGC愈发普及的当前情形下,把它的机械痕迹以及同质化特…...

【Python原生AOT编译终极指南】:2026年CPython 3.15+官方AOT源码级拆解与生产落地避坑清单

第一章:Python原生AOT编译的演进脉络与3.15官方定位Python长期以来以解释执行和字节码(.pyc)为默认运行范式,AOT(Ahead-of-Time)编译长期处于社区实验阶段。从Nuitka、Cython到PyO3/Rust绑定,再…...

KT0803K FM发射芯片Arduino驱动开发与射频工程实践

1. KT0803系列FM发射芯片Arduino库深度解析与工程实践指南1.1 芯片定位与系统级约束KT0803及其衍生型号(KT0803K/L/M)是高度集成的单芯片FM广播发射器,专为低功耗、小体积音频广播应用设计。该系列芯片内部集成了PLL频率合成器、立体声编码器…...

【仅限首批认证用户开放】Polars 2.0企业清洗最佳实践白皮书(含GDPR脱敏DSL语法速查表)

第一章:Polars 2.0企业级数据清洗能力全景概览Polars 2.0 将数据清洗从“脚本式修补”推向“工程化流水线”,依托零拷贝内存模型、并行执行引擎与声明式 API,原生支持高吞吐、低延迟、强一致性的清洗任务。其核心能力不再依赖 Pandas 风格的链…...

FastAPI 2.0 + LLM流式输出全栈方案,含OpenAI兼容层、前端SSE重连策略、服务端背压控制(仅限内部技术白皮书级实录)

第一章:FastAPI 2.0 异步 AI 流式响应教程概览FastAPI 2.0 原生强化了对异步流式响应(StreamingResponse)的支持,为构建低延迟、高吞吐的 AI 接口(如大语言模型推理、语音合成、实时图像生成)提供了坚实基础…...

【JupyterLab实战】构建跨平台AI算力监控仪表盘

1. 为什么需要跨平台AI算力监控? 在AI开发过程中,我们经常遇到这样的场景:模型训练到一半突然卡死,却不知道是GPU内存爆了还是CPU瓶颈;多卡并行时某张卡莫名其妙跑不满;昇腾芯片的温度报警频繁触发却找不到…...

SEO_10个提升网站排名的实用SEO技巧分享(370 )

SEO:10个提升网站排名的实用SEO技巧分享 在当今的互联网时代,一个网站的成功离不开搜索引擎优化(SEO)。SEO不仅仅是一套技术,更是一种思维方式。本文将详细分享十个实用的SEO技巧,帮助你提升网站的排名,吸…...