第28讲:单链表的应用
目录单链表经典算法OJ题目单链表相关经典算法OJ题1移除链表元素单链表相关经典算法OJ题2反转链表单链表相关经典算法OJ题3合并两个有序链表单链表相关经典算法OJ题4链表的中间结点循环链表经典应用-环形链表的约瑟夫问题单链表相关经典算法OJ题5分割链表基于单链表再实现通讯录项目单链表经典算法1. 链表经典算法OJ题目1.1 单链表相关经典算法OJ题1移除链表元素1.2 单链表相关经典算法OJ题2反转链表1.3 单链表相关经典算法OJ题3合并两个有序链表1.4 单链表相关经典算法OJ题4链表的中间结点1.5 循环链表经典应用-环形链表的约瑟夫问题著名的Josephus问题据说著名犹太历史学家 Josephus 有过以下的故事在罗马人占领乔塔帕特后39 个犹太人与 Josephus 及他的朋友躲到一个洞中39 个犹太人决定宁愿死也不要被人抓到于是决定了一个自杀方式41 个人排成一个圆圈由第 1 个人开始报数每报数到第 3 人该人就必须自杀然后再由下一个重新报数直到所有人都自杀身亡为止。然而 Josephus 和他的朋友并不想遵从Josephus 要他的朋友先假装遵从他将朋友与自己安排在第 16 个与第 31 个位置于是逃过了这场死亡游戏。1.6 单链表相关经典算法OJ题5分割链表基于单链表再实现通讯录项目SList.h//SList.h//// Created by mm on 2023/6/13.//#includestdio.h#includestdlib.h#includeassert.h#includecontact.htypedefstructPersonInfoSLTDataType;//typedef int SLTDataType;structSListNode{structSListNode*next;SLTDataType data;}voidSLTPrint(SLTNode*phead);//头部插入删除/尾部插入删除voidSLTPushBack(SLTNode**pphead,SLTDataType x);voidSLTPushFront(SLTNode**pphead,SLTDataType x);voidSLTPopBack(SLTNode**pphead);voidSLTPopFront(SLTNode**pphead);//查找SLTNode*SLTFind(SLTNode*phead,SLTDataType x);//在指定位置之前插入数据voidSLTInsert(SLTNode**pphead,SLTNode*pos,SLTDataType x);//删除pos节点voidSLTErase(SLTNode**pphead,SLTNode*pos);//在指定位置之后插入数据voidSLTInsertAfter(SLTNode*pos,SLTDataType x);//删除pos之后的节点voidSLTEraseAfter(SLTNode*pos);//销毁链表voidSListDesTroy(SLTNode**pphead);contact.h//contact.h#pragmaonce#defineNAME_MAX100#defineSEX_MAX4#defineTEL_MAX11#defineADDR_MAX100//前置声明typedefstructSListNodecontact;//用户数据typedefstructPersonInfo{charname[NAME_MAX];charsex[SEX_MAX];intage;chartel[TEL_MAX];charaddr[ADDR_MAX];}PeoInfo;//初始化通讯录voidInitContact(contact**con);//实际调用的是链表的初始化接口可以简单做一个头结点的初始化//添加通讯录数据voidAddContact(contact**con);// 链表尾插/头插//删除通讯录数据voidDelContact(contact**con);//链表的删除指定位置的数据//展示通讯录数据voidShowContact(contact*con);//链表的打印//查找通讯录数据voidFindContact(contact*con);//修改通讯录数据voidModifyContact(contact**con);//销毁通讯录数据voidDestroyContact(contact**con);contact.c#define_CRT_SECURE_NO_WARNINGS#includecontact.h#includeSList.hvoidLoadContact(contact**con){FILE*pffopen(contact.txt,rb);if(pfNULL){perror(fopen error!\n);return;}//循环读取文件数据PeoInfo info;while(fread(info,sizeof(info),1,pf)){SLTPushBack(con,info);}printf(历史数据导入通讯录成功\n);}voidInitContact(contact**con){LoadContact(con);//把本地的通讯录数据导入到链表结构}voidAddContact(contact**con){PeoInfo info;printf(请输入姓名\n);scanf(%s,info.name);printf(请输入性别\n);scanf(%s,info.sex);printf(请输入年龄\n);scanf(%d,info.age);printf(请输入联系电话\n);scanf(%s,info.tel);printf(请输入地址\n);scanf(%s,info.addr);SLTPushBack(con,info);printf(插入成功\n);}contact*FindByName(contact*con,charname[]){contact*curcon;while(cur){if(strcmp(cur-data.name,name)0){returncur;}curcur-next;}returnNULL;}voidDelContact(contact**con){charname[NAME_MAX];printf(请输入要删除的用户姓名\n);scanf(%s,name);contact*posFindByName(*con,name);if(posNULL){printf(要删除的用户不存在删除失败\n);return;}SLTErase(con,pos);printf(删除成功\n);}voidShowContact(contact*con){printf(%-10s %-4s %-4s %15s %-20s\n,姓名,性别,年龄,联系电话,地址);contact*curcon;while(cur){printf(%-10s %-4s %-4d %15s %-20s\n,cur-data.name,cur-data.sex,cur-data.age,cur-data.tel,cur-data.addr);curcur-next;}}voidFindContact(contact*con){charname[NAME_MAX];printf(请输入要查找的用户姓名\n);scanf(%s,name);contact*posFindByName(con,name);if(posNULL){printf(要查找的用户不存在查找失败\n);return;}printf(查找成功\n);printf(%-10s %-4s %-4d %15s %-20s\n,pos-data.name,pos-data.sex,pos-data.age,pos-data.tel,pos-data.addr);}voidModifyContact(contact**con){charname[NAME_MAX];printf(请输入要修改的用户名称:\n);scanf(%s,name);contact*posFindByName(*con,name);if(posNULL){printf(要查找的用户不存在修改失败\n);return;}printf(请输入要修改的姓名\n);scanf(%s,pos-data.name);printf(请输入要修改的性别\n);scanf(%s,pos-data.sex);printf(请输入要修改的年龄\n);scanf(%d,pos-data.age);printf(请输入要修改的联系电话\n);scanf(%s,pos-data.tel);printf(请输入要修改的地址\n);scanf(%s,pos-data.addr);printf(修改成功\n);}voidSaveContact(contact*con){FILE*pffopen(contact.txt,wb);if(pfNULL){perror(fopen error!\n);return;}//将通讯录数据写入文件contact*curcon;while(cur){fwrite((cur-data),sizeof(cur-data),1,pf);curcur-next;}printf(通讯录数据保存成功\n);}voidDestroyContact(contact**con){SaveContact(*con);//在通讯录销毁之前先把历史数据保存到本地文件中contact.txtSListDesTroy(con);}

相关新闻

ClaudeAnimationBase工作流四步法:从分镜脚本到MP4成片,AI如何用Contact Sheet自查动画

ClaudeAnimationBase工作流四步法:从分镜脚本到MP4成片,AI如何用Contact Sheet自查动画

【免费下载链接】ClaudeAnimationBase A starter kit for animating hand-painted cartoons with Claude: p5.js p5.brush, the Clawd character, 31 acted emotions and a guide for the model 项目地址: https://gitcode.com/gh_mirrors/cl/ClaudeAnimationBase …

2026/10/15 15:31:18 阅读更多 →
OAuth2与OIDC核心概念详解:授权码流程、Token类型与实战

OAuth2与OIDC核心概念详解:授权码流程、Token类型与实战

做后端这些年,我一直把第三方登录当成“一杯奶茶的事”——调接口、拿资料、建账号,看起来三分钟就能搞定。直到有个项目要求严格区分“这是第三方用户”和“这是本平台用户”,我才发现自己把 OAuth2 和 OpenID 混着用已经很长时间了。所以有…

2026/10/15 15:31:18 阅读更多 →
制造业研发数字化:工艺参数与经验沉淀的技术解法

制造业研发数字化:工艺参数与经验沉淀的技术解法

一个做工艺的老工程师退休之后,厂里花了两年时间、试了几十种参数,才把同样的经验重新摸出来。摸索出来之后,工艺文件上写的也只是最终那个参数——中间试错的那几十次,没有留下任何痕迹。这件事我印象很深。因为这不是个例。很多…

2026/10/15 15:31:18 阅读更多 →

最新新闻

UniApp复选交互全攻略:全选、多选、反选与状态管理

UniApp复选交互全攻略:全选、多选、反选与状态管理

做跨端项目时,“复选框支持全选、多选、反选”几乎是每次都会点到的菜。最近做管理后台的批量操作,又把这个需求完完整整走了一遍:列表里每条记录要能单独勾选,顶部一个全选,底部一个反选,勾选数量实时联动…

2026/10/15 16:19:52 阅读更多 →
clangd+LSP配置指南:让编辑器正确解析交叉编译C/C++代码

clangd+LSP配置指南:让编辑器正确解析交叉编译C/C++代码

1. 从一个让人抓狂的场景说起如果你写过C或者C,大概率经历过这种时刻:代码明明在本地编译得好好的,编辑器里却满屏红波浪线,头文件找不到、类型识别不出来、跳转定义跳到一个完全不相干的地方。更让人崩溃的是交叉编译的场景——你…

2026/10/15 16:19:52 阅读更多 →
opencode-AI skill 安装教程(Windows):用 TaoToken 统一 Key 打通 Node.js 环境

opencode-AI skill 安装教程(Windows):用 TaoToken 统一 Key 打通 Node.js 环境

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 16:19:52 阅读更多 →
正弦波三倍频电路设计:从5V/1kHz到15V/3kHz的TaoToken辅助方案

正弦波三倍频电路设计:从5V/1kHz到15V/3kHz的TaoToken辅助方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 16:19:52 阅读更多 →
FPGA正弦波信号发生器Verilog代码:DDS架构与DAC接口实战

FPGA正弦波信号发生器Verilog代码:DDS架构与DAC接口实战

简介:这份资源提供基于Verilog的正弦波信号发生器完整工程代码,面向数字电路设计初学者与FPGA开发者,帮助理解查表法生成波形的实现思路。工程围绕查找表存储正弦采样值,配合计数器控制角度递增,在时钟驱动下输出连续周…

2026/10/15 16:19:52 阅读更多 →
2026 大模型 API 免费额度汇总:DeepSeek、Qwen、Claude 等怎么免费调用

2026 大模型 API 免费额度汇总:DeepSeek、Qwen、Claude 等怎么免费调用

刚开始接触大模型 API 时,很多人都会先找“免费 API”。 这很正常。无论是学习 API 调用、测试 Agent,还是给自己的小项目接一个模型,前期其实没必要一上来就投入太多成本。 但真正找一圈后会发现,“免费 API”并不是一种固定模式…

2026/10/15 16:18:46 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →