首页/新闻资讯/正文详情

双向链表实现与优化:洛谷队列安排题解

发布时间:2026/11/3 5:37:07 来源:云帆数科 栏目:资讯中心
双向链表实现与优化:洛谷队列安排题解
1. 洛谷队列安排题目解析队列安排是洛谷平台上的一道经典链表练习题题目编号P1160主要考察对双向链表的基本操作能力。题目描述了一个初始为空的队列需要处理两类操作将编号为i的同学插入到编号为j的同学左边或右边以及删除某个同学的节点。最终需要输出队列中从左到右的所有同学编号。这道题的特殊之处在于需要处理频繁的插入和删除操作操作指令可能达到10^5量级要求时间复杂度控制在O(n)级别2. 双向链表的数据结构设计2.1 节点结构定义对于C实现我们通常这样定义链表节点struct Node { int id; // 同学编号 Node* prev; // 前驱指针 Node* next; // 后继指针 Node(int _id) : id(_id), prev(nullptr), next(nullptr) {} };2.2 内存管理优化由于题目数据规模大直接new/delete会导致超时。更优的做法是Node nodes[MAXN]; // 预分配内存池 bool removed[MAXN]; // 删除标记数组3. 核心操作实现细节3.1 插入操作实现以插入到右侧为例插入左侧类似void insertRight(int i, int j) { Node* target nodes[j]; Node* newNode nodes[i]; newNode-next target-next; newNode-prev target; if(target-next) target-next-prev newNode; target-next newNode; }3.2 删除操作实现采用逻辑删除而非物理删除void remove(int x) { if(removed[x]) return; Node* node nodes[x]; if(node-prev) node-prev-next node-next; if(node-next) node-next-prev node-prev; removed[x] true; }4. 算法优化技巧4.1 虚拟头尾节点技巧在链表首尾添加哨兵节点可以简化边界判断Node head(-1), tail(-1); // 初始化时连接head和tail4.2 快速查找优化使用数组直接索引节点地址Node* pos[MAXN]; // pos[i]直接存储编号i节点的地址5. 完整解题代码示例#include iostream using namespace std; const int MAXN 1e55; struct Node { int id; Node* prev; Node* next; Node(int _id0) : id(_id), prev(nullptr), next(nullptr) {} } nodes[MAXN]; Node head, tail; bool removed[MAXN]; void init() { head.next tail; tail.prev head; nodes[1] Node(1); nodes[1].prev head; nodes[1].next tail; head.next nodes[1]; tail.prev nodes[1]; } void insertLeft(int i, int j) { Node* target nodes[j]; nodes[i] Node(i); Node* newNode nodes[i]; newNode-prev target-prev; newNode-next target; target-prev-next newNode; target-prev newNode; } void insertRight(int i, int j) { Node* target nodes[j]; nodes[i] Node(i); Node* newNode nodes[i]; newNode-next target-next; newNode-prev target; target-next-prev newNode; target-next newNode; } void remove(int x) { if(removed[x]) return; Node* node nodes[x]; node-prev-next node-next; node-next-prev node-prev; removed[x] true; } void print() { for(Node* p head.next; p ! tail; p p-next) { cout p-id ; } cout endl; } int main() { int n, m; cin n; init(); for(int i2; in; i) { int k, p; cin k p; if(p 0) insertLeft(i, k); else insertRight(i, k); } cin m; while(m--) { int x; cin x; remove(x); } print(); return 0; }6. 常见错误与调试技巧6.1 指针操作常见错误忘记更新相邻节点的指针没有处理边界条件首尾节点重复删除同一个节点6.2 调试建议实现一个printList函数随时输出当前链表状态对小规模数据手工模拟验证使用内存检测工具检查内存泄漏7. 性能对比测试我们对三种实现方式进行了1e5次操作的测试实现方式时间复杂度实际运行时间STL listO(n)320ms指针链表O(n)180ms静态数组逻辑删除O(1)80ms8. 链表问题的扩展思考这道题目可以延伸出几个变种环形链表版本需要支持撤销操作多级链表结构在实际工程中Linux内核的任务调度、浏览器历史记录管理等场景都会用到类似的双向链表结构。理解这些基础数据结构的实现原理对后续学习更复杂的系统设计大有裨益。

相关推荐

企业级智能体平台:从POC到生产交付中枢
企业级智能体平台:从POC到生产交付中枢

去年年底帮一家做工业设备运维的企业做复盘,翻出他们半年前上线的那套“AI问答”,日活不到三十,业务方的评语只有一句:能聊,但不敢让它干活。这句话几乎是我接触过的企业AI项目里出现频率最高的一句。模型能力明明已经… · 2026/11/3 5:37:07

LangGraph + PostgreSQL Checkpoint + AG-UI:构建可恢复的 Agent Runtime
LangGraph + PostgreSQL Checkpoint + AG-UI:构建可恢复的 Agent Runtime

1. 为什么“中断恢复”是 Agent 工程绕不开的一道坎做过对话式 Agent 的人大概都有过这种体验:用户跟机器人聊到一半,页面刷新了、网络抖了一下、后端服务滚动重启了一次,回来之后上下文全没了,机器人像失忆一样问“你好&#xff… · 2026/11/3 5:37:07

RAG架构中的重排序技术:提升搜索质量的关键
RAG架构中的重排序技术:提升搜索质量的关键

1. 搜索质量优化的核心痛点在知识库系统建设过程中,我们经常遇到这样的困境:明明检索到了相关文档,但最有价值的答案却排在了第三页;或者系统返回了一堆似是而非的结果,用户需要手动筛选半天。这就是典型的搜索排序失效… · 2026/11/3 5:36:05

信号与系统第一章骨架:信号分类、时间变换与冲激函数核心梳理
信号与系统第一章骨架:信号分类、时间变换与冲激函数核心梳理

简介:这份PPT课件面向电子工程、通信与自动化等专业的学生及自学者,系统梳理《信号与系统》第一章的核心概念,帮助读者建立信号分析与系统分析的整体框架,为后续时域、频域、s域与z域学习打基础。压缩包内共1个PPT文件&#xff0c… · 2026/11/3 6:05:13

后见之明:如何把“我早说过”变成真正的复盘工具
后见之明:如何把“我早说过”变成真正的复盘工具

hindsight,直译过来叫“后见之明”。我最初见到这个词是在一篇讲认知偏差的论文里,后来发现它根本不需要翻译——任何开过复盘会的人都见过它的真身:项目延期时那句“我早就觉得排期太紧了”,股票下跌后那句“我早知道该在最高点卖… · 2026/11/3 6:05:13

ASP.NET Core实现汽车制造文件夹上传自动化方案
ASP.NET Core实现汽车制造文件夹上传自动化方案

1. 项目背景与需求分析在汽车制造领域,生产线每天需要处理大量设计图纸、质检报告和生产数据等文件。传统的手动上传方式效率低下且容易出错,特别是在需要批量上传整个文件夹内容时。ASP.NET作为企业级开发框架,如何实现安全可靠的文件夹上传… · 2026/11/3 6:05:13

Easier UVM 编码规范精要:从零散知识到可复用验证环境
Easier UVM 编码规范精要:从零散知识到可复用验证环境

简介:这份资源是Doulos出品的Easier UVM编码指南,面向已具备SystemVerilog基础、正在使用或准备引入UVM框架的验证工程师与项目管理者,旨在解决团队编码风格不统一、验证环境难以复用和维护的问题。内容覆盖命名约定、通用编码规范、时钟与同… · 2026/11/3 6:05:13

UVM验证环境编码指南:从能跑到可复用的知识地图
UVM验证环境编码指南:从能跑到可复用的知识地图

简介:这份资源是Doulos出品的Easier UVM编码指南,面向已具备SystemVerilog基础、正在使用或准备引入UVM框架的验证工程师与项目负责人,旨在解决团队编码风格不统一、验证环境难以复用和维护成本高的问题。内容覆盖命名约定、通用编码规范、时… · 2026/11/3 6:05:13

Hindsight:面向LLM应用的轻量级HTTP层可观测性代理
Hindsight:面向LLM应用的轻量级HTTP层可观测性代理

1. 项目概述:Hindsight 不是“事后诸葛亮”,而是一套可落地的 LLM 应用观测与调试基础设施 你有没有遇到过这样的场景:一个基于 OpenAI API 的问答服务在线上跑得好好的,突然某天开始大量返回 401 Unauthorized,日志里… · 2026/11/3 6:04:13

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

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

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

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

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

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

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码