链表的学习与应用--双向循环链表_增加操作

链表的学习与应用--双向循环链表_增加操作
   相信大家都在学习双向链表的过程中痛不欲生,但没关系相信大家看了这篇文章之后会对着抽象的数据结构有一个新的理解    这段时间以来笔者也是成功入职了一家方案公司,也算是实现了最初的那个梦想吧!|    话不多说现在开始双向循环链表插入知识的介绍 本人郑重承诺:         所有文章均不设置任何观看门槛均免费

 📜虚拟滚动与长列表优化

🎮游戏开发与多媒体播放列表

🖥️操作系统中的进程调度

 ✍️文本编辑器的“撤销”与“重做”

 🌐浏览器历史记录

📒双向链表的实际应用


📂list.h 文件

🍋老规矩上源码

#ifndef __LIST_H_ #define __LIST_H_ #include <stdio.h> #include <windows.h> #include <stdbool.h> typedef struct Flight_List { /* 航班号码数据 */ int Flight_Number[10] ; /* 用户名字数组 */ char User_Name[2][3] ; /* 前驱指针 */ struct Flight_List *Prev; /* 后继指针 */ struct Flight_List *Next; } Flight_List; /* 链表初始化 */ Flight_List *List_Iint(); /* 增加链表 */ Flight_List *List_Add(Flight_List *Head, int flightNumber, char *userName, bool determine); /* 删除链表 */ Flight_List *List_Delete(Flight_List *Head, int Serial_Number); /* 改变链表 */ Flight_List *List_Modify(Flight_List *Head, int Serial_Number,char *newUserName); /* 查找链表 */ Flight_List *List_Find(Flight_List *Head, int Serial_Number); #endif

📂list.c 文件

/********************************************************************** * 函数名称: List_Add * 功能描述: 增加一个节点 * 输入参数: @Head_头节点 * @Flight_Number_航班号 * @Flight_Name_航班名 * @Determine_判断是否头插 * 输出参数: 新的头节点 * 返 回 值: 新的头节点 * 修改日期 版本号 修改人 修改内容 * ----------------------------------------------- * 2026/02/23 V1.0 Orange-341024489 创建 * 2026/02/23 V1.1 Assistant 修复逻辑错误 ***********************************************************************/ Flight_List *List_Add(Flight_List *Head, int Flight_Number, char *Flight_Name, bool Determine) { /* 创建临时节点 */ Flight_List *Temporary_Node = (Flight_List*)malloc(sizeof(Flight_List)); /* 链表的错误处理 */ if (Temporary_Node == NULL) { printf("临时节点内存分配失败!\n"); return Head; } /* 链表的数据 */ Temporary_Node->Flight_Number[0] = Flight_Number; strcpy(Temporary_Node->User_Name[0], Flight_Name); /* 如果实在记不住顺序就记指针的出场顺序无论是头插还是尾插 * 就记住指针的出场顺序 * 1: -> Next * 2: -> Prev * 3: -> Next * 4: -> Prev *代入记忆法: 头插法就是"小弟说我要当老大" *代入记忆法:尾插法就是"新来的这个小弟你来当" */ if (Determine) { /* 头插法 */ if (Head == NULL) { // 链表为空,新节点作为头节点 Temporary_Node->Prev = Temporary_Node; Temporary_Node->Next = Temporary_Node; return Temporary_Node; } else { /* 第一个节点 */ Flight_List *First_Node = Head-> Next; /*头插情景剧记忆法: 小弟说我要当老大*/ Temporary_Node -> Next = First_Node; /*头插情景剧记忆法: 老大打不过就把位置让了出来*/ First_Node -> Prev = Temporary_Node; /*头插情景剧记忆法: 老二看到老大也不行了就也把位置让给新来的*/ Head -> Next = Temporary_Node; /*头插情景剧记忆法: 新来的前去接老二*/ Temporary_Node -> Prev = Head; return Temporary_Node; } } else { /* 尾插法 */ if (Head == NULL) { // 链表为空,新节点作为头节点 Temporary_Node->Prev = Temporary_Node; Temporary_Node->Next = Temporary_Node; return Temporary_Node; } else { /* 最后一个节点 */ Flight_List *Last_Node = Head -> Prev; /*尾插情景剧记忆法: 小弟说:"新来的这个小弟你来当"*/ Last_Node -> Next = Temporary_Node; /*尾插情景剧记忆法: 新来小弟说:"我当就我当"*/ Temporary_Node -> Prev = Last_Node; /*尾插情景剧记忆法: 新来小弟后面不服,说接下来我要见老大*/ Temporary_Node -> Next = Head; /*尾插情景剧记忆法:老大前来见小弟*/ Head -> Prev = Temporary_Node; return Temporary_Node; } } }

🀄️在开始理解之前要明白 "Prev" 和 "Next" 的位置位于哪里

👉前驱指针_Prev

让节点向前的进的指针;所以位于几何关系的右边

👈后继指针_Next

让节点后退的指针;所以位于几何关系的左边

👑头插与尾插巧记法_黑帮夺位

现在开始忘记所有你之前学的知识,老师讲的/其他博主说的.现在听我讲一个故事

⌚️故事一:重生之我要当老大

在很久很久一起前知道有一个门派叫"坤门"

  •         而你,你就是这个故事的主角名字叫,Temporary_Node,可你不满足于这个门派.你说我要做就要做最大.于是你把目标瞄准了.隔壁的坤门,他的老大叫:Flight_List
/* 第一个节点 */ Flight_List *First_Node = Head-> Next;
  •         你和这个坤门发生什么事呢?就是你想当"坤门"的老大 ,你跟门派老大说.下个位置(Next)是我的!
/*头插情景剧记忆法: 小弟说我要当老大*/ Temporary_Node -> Next = First_Node;
  •         于是,经过一番激烈的交战之后,坤门老大打不过你就把位置让给你了.
/*头插情景剧记忆法: 老大打不过就把位置让了出来*/ First_Node -> Prev = Temporary_Node;
  •         坤门老二(Head)见状,也赶紧来投降.
/*头插情景剧记忆法: 老二看到老大也不行了就也把位置让给新来的*/ Head -> Next = Temporary_Node;
  •         你前去迎接老二
/*头插情景剧记忆法: 新来的前去接老二*/ Temporary_Node -> Prev = Head;
  • 这就是头插法巧妙记忆的公式了
/* 头插法 */ if (Head == NULL) { // 链表为空,新节点作为头节点 Temporary_Node->Prev = Temporary_Node; Temporary_Node->Next = Temporary_Node; return Temporary_Node; } else { /* 第一个节点 */ Flight_List *First_Node = Head-> Next; /*头插情景剧记忆法: 小弟说我要当老大*/ Temporary_Node -> Next = First_Node; /*头插情景剧记忆法: 老大打不过就把位置让了出来*/ First_Node -> Prev = Temporary_Node; /*头插情景剧记忆法: 老二看到老大也不行了就也把位置让给新来的*/ Head -> Next = Temporary_Node; /*头插情景剧记忆法: 新来的前去接老二*/ Temporary_Node -> Prev = Head; return Temporary_Node; }

👦故事二:重生之我要见老大

        现在开始有第二个故事了,现在你武功没那么高,打算拜见坤门,所以你只能从从小弟开始当.坤门唯一的小弟(Last_Node)

/* 最后一个节点 */ Flight_List *Last_Node = Head -> Prev;
  •         小弟说;"新来的以后就你负责倒垃圾换水的活了"
/*尾插情景剧记忆法: 小弟说:"新来的这个小弟你来当"*/ Last_Node -> Next = Temporary_Node;
  •         你作为新来的说"我当就我当"
/*尾插情景剧记忆法: 新来小弟说:"我当就我当"*/ Temporary_Node -> Prev = Last_Node;
  •         终于有一天你受不了了说我要见老大
/*尾插情景剧记忆法: 新来小弟后面不服,说接下来我要见老大*/ Temporary_Node -> Next = Head;
  •         于是老大跑去见你,说别感冒
/*尾插情景剧记忆法:老大前来见小弟*/ Head -> Prev = Temporary_Node;
  • 这就是尾插法巧妙记忆的公式了
/* 尾插法 */ if (Head == NULL) { // 链表为空,新节点作为头节点 Temporary_Node->Prev = Temporary_Node; Temporary_Node->Next = Temporary_Node; return Temporary_Node; } else { /* 最后一个节点 */ Flight_List *Last_Node = Head -> Prev; /*尾插情景剧记忆法: 小弟说:"新来的这个小弟你来当"*/ Last_Node -> Next = Temporary_Node; /*尾插情景剧记忆法: 新来小弟说:"我当就我当"*/ Temporary_Node -> Prev = Last_Node; /*尾插情景剧记忆法: 新来小弟后面不服,说接下来我要见老大*/ Temporary_Node -> Next = Head; /*尾插情景剧记忆法:老大前来见小弟*/ Head -> Prev = Temporary_Node; return Temporary_Node; }

👍强记方法

/*  如果实在记不住顺序就记指针的出场顺序无论是头插还是尾插

     *  就记住指针的出场顺序

     *  1: -> Next

     *  2: -> Prev

     *  3: -> Next

     *  4: -> Prev

     *代入记忆法: 头插法就是"小弟说我要当老大"

     *代入记忆法:尾插法就是"新来的这个小弟你来当"

     */

Read more

一天开13个会、一个Bug要修200天!前亚马逊L7爆料:这轮大裁员,AI只是“背锅侠”

一天开13个会、一个Bug要修200天!前亚马逊L7爆料:这轮大裁员,AI只是“背锅侠”

整理 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) 过去一年,大型科技公司的裁员消息几乎从未停过。但当公司对外给出的理由越来越统一,“AI 让组织更高效”,也有越来越多内部员工开始提出另一种质疑:事情或许没那么简单。 最近,一段来自前亚马逊员工 Becky 的 YouTube 视频在开发者社区流传开来。她曾在亚马逊工作 7 年,其中 5 年担任 L7 级别的技术管理者,负责过团队年度规划(OP1)等核心管理工作——可去年,她主动离开了亚马逊。 就在最近,她的三位前同事接连被裁,其中两人还是 H-1B 签证员工,都背着房贷压力。其中一位同事忍不住给 Becky 发消息:“你去年离开的时候,是不是已经预料到会发生这些?” 对此,Becky 的回答很坦诚:她不知道具体什么时候会裁员,但她早就感觉情况不对劲了。 在她看来,这轮裁员被归因为

By Ne0inhk
用 10% GPU 跑通万亿参数 RL!马骁腾拆解万亿参数大模型的后训练实战

用 10% GPU 跑通万亿参数 RL!马骁腾拆解万亿参数大模型的后训练实战

整理 | 梦依丹 出品 | ZEEKLOG(ID:ZEEKLOGnews) 左手是提示词的工程化约束,右手是 Context Learning 的自我进化。 在 OpenAI 新发布的《Prompt guidance for GPT-5.4》中,反复提到了 Prompt Contracts(提示词合约)。要求开发者像编写代码一样,严谨地定义 Agent 的输入边界、输出格式与工具调用逻辑,进而换取 AI 行为的确定性。 但在现实操作中,谁又能日复一日地去维护那些冗长、脆弱的“提示词代码”? 真正的 Agent,不应只靠阅读 Context Engineering,更应该具备 Context Learning 的能力。 为此,在 4 月 17-18

By Ne0inhk
当OpenClaw引爆全网,谁来解决企业AI Agent的“落地焦虑”?

当OpenClaw引爆全网,谁来解决企业AI Agent的“落地焦虑”?

2026 年 3 月,开源 AI Agent 框架 OpenClaw 在 GitHub 上的星标突破28万,并一度超越 React,成为 GitHub 最受关注的软件项目之一。短时间内,开发者利用它构建了大量实验性应用:从全栈开发辅助,到自动化营销脚本,再到桌面操作自动化,AI Agent 的能力边界正在迅速被拓展。 这股热潮也带动了另一个趋势——本地部署与算力硬件需求的快速增长。越来越多开发者尝试在个人设备或企业服务器上运行 Agent 系统,以获得更高的控制权和数据安全性。 从表面上看,AI Agent 似乎正从“概念验证”走向更广泛的开发实践。但在企业环境中,情况却没有想象中乐观。当企业负责人开始追问—— “它能直接解决我的业务问题吗?” 很多演示级产品仍难以给出令人满意的答案。 如何让 Agent 真正融入企业既有系统、适配复杂业务流程,正成为大模型产业落地必须跨越的一道门槛。 与此同时,中国不同城市的产业结构差异明显:互联网、

By Ne0inhk
二手平台出现OpenClaw卸载服务,299元可上门“帮卸”;2026年春招AI人才身价暴涨:平均月薪超6万;Meta辟谣亚历山大·王离职 | 极客头条

二手平台出现OpenClaw卸载服务,299元可上门“帮卸”;2026年春招AI人才身价暴涨:平均月薪超6万;Meta辟谣亚历山大·王离职 | 极客头条

「极客头条」—— 技术人员的新闻圈! ZEEKLOG 的读者朋友们好,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。(投稿或寻求报道:[email protected]) 整理 | 苏宓 出品 | ZEEKLOG(ID:ZEEKLOGnews) 一分钟速览新闻点! * 微信员工辟谣“小龙虾可自动发红包”:不要以讹传讹 * 蚂蚁集团启动春招,超 70% 为 AI 相关岗位 * 受贿 208 万!拼多多一员工被抓 * 2026 年春招 AI 人才身价暴涨: 平均月薪超 6 万元 * 二手平台出现 OpenClaw 上门卸载服务 * 权限太高,国家互联网应急中心发布 OpenClaw 安全应用的风险提示 * 字节豆包内测 AI 电商功能:无需跳转抖音,日活用户数超

By Ne0inhk