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

LinkedList 链表数据结构实现 (OPENPPP2)

🔍 LinkedList 链表数据结构实现 (OPENPPP2)


🧱 1. 数据结构设计

LinkedListNode 结构
LinkedListNode
- shared_ptr Previous
- shared_ptr Next
- T Value
- LinkedList* LinkedList_
LinkedList 类
LinkedList
- shared_ptr m_first
- shared_ptr m_last
- int m_count
+First()
+Last()
+Count()
+IsEmpty()
+AddFirst(shared_ptr)
+AddLast(shared_ptr)
+AddAfter(shared_ptr, shared_ptr)
+AddBefore(shared_ptr, shared_ptr)
+RemoveFirst()
+RemoveLast()
+Remove(shared_ptr)
+Find(T)
+Clear()

⚙️ 2. 核心操作性能分析

📊 时间复杂度对比

在这里插入图片描述

🔧 操作性能详解
  1. 添加操作(AddFirst/AddLast/AddAfter/AddBefore)

    • 时间复杂度:O(1)
    • 只需调整相邻节点指针
    • 示例流程:
    Next
    Next
    Previous
    Previous
    新节点
    原节点
    后节点
  2. 删除操作(Remove/RemoveFirst/RemoveLast)

    • 时间复杂度:O(1)
    • 指针调整逻辑:
    Next
    Previous
    前节点
    目标节点
    后节点
  3. 查找操作(Find)

    • 时间复杂度:O(n)
    • 遍历流程图:
      在这里插入图片描述

🛡️ 3. 安全性评估

✅ 优点
安全性特性
智能指针管理
空指针检查
节点状态重置
自动内存释放
防止空指针异常
移除后断开所有链接
⚠️ 风险点
shared_ptr
安全风险
循环引用
线程不安全
节点重复添加
内存泄漏风险
并发修改冲突
节点归属混乱
🧪 关键问题分析
  1. 循环引用问题

    • 节点间通过shared_ptr互指
    • 解决方案建议:
    问题
    weak_ptr解决
    Previous用weak_ptr
    Next用shared_ptr
  2. 线程安全问题

    • 无任何同步机制
    • 并发操作可能导致:
    ThreadA List ThreadB RemoveFirst AddLast 完成 数据损坏 ThreadA List ThreadB
  3. 节点归属问题

    • 添加节点时未检查现有归属:
    添加节点
    LinkedList_ != null
    应拒绝添加
    允许添加

🔄 4. 操作原理图解

链表结构
Previous
Next
Previous
Next
Previous
Next
LinkedList
m_first
m_last
Node1
NULL
Node2
Node3
添加节点流程
User LinkedList NodeA NodeB NewNode AddAfter(NodeA, NewNode) 获取Next (NodeB) 设置Previous=NodeA 设置Next=NodeB 设置Next=NewNode 设置Previous=NewNode 设置LinkedList_=this User LinkedList NodeA NodeB NewNode
删除节点流程
头节点
尾节点
中间节点
Remove操作
节点位置
RemoveFirst
RemoveLast
RemoveMiddle
备份m_first
设置m_first=原first->Next
重置原first指针
计数减1
获取previous和next
previous->Next = next
next->Previous = previous

📈 5. 性能优化建议

在这里插入图片描述


🎯 总结评估

85
90
70
75
正确性
A_score
性能
B_score
安全性
C_score
扩展性
D_score
引用:

LinkedList.h

核心结论:
  1. 基础功能完善:双向链表核心操作实现正确,时间复杂度达标
  2. 内存管理合理:使用shared_ptr避免基础内存泄漏
  3. 关键缺陷:循环引用、线程安全、节点归属检测缺失
  4. 优化方向:改用weak_ptr+互斥锁+归属验证的组合方案

建议升级方案:
weak_ptr(前驱指针)+ shared_ptr(后继指针)+ mutex + 节点状态验证

http://www.lryc.cn/news/581393.html

相关文章:

  • 前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
  • AI智能体革命:从对话机器到自主决策的进化之路 **——当AI长出“手和脑”,一场人机协作范式转移正在发生
  • AI小智项目全解析:软硬件架构与开发环境配置
  • 图灵完备之路(数电学习三分钟)----解码器
  • Pytest 测试发现机制详解:自动识别测试函数与模块
  • 理想汽车6月交付36279辆 第二季度共交付111074辆
  • 比较两个csv文件的内容是否一致
  • Python 机器学习核心入门与实战进阶 Day 3 - 决策树 随机森林模型实战
  • HTML初学者第三天
  • centos 7.6安装mysql8
  • 基于大模型的肾积水全周期预测与诊疗方案研究报告
  • 03每日简报20250705
  • Qt开发:QListWidget的介绍和使用
  • java整合itext pdf实现自定义PDF文件格式导出
  • 画笔的进化:生成式AI与艺术创造力的范式革命
  • 完成ssl不安全警告
  • 数据结构:数组:二分查找(Binary Search)
  • 用 Turbo Vision 2 为 Qt 6 控制台应用创建 TUI 字符 MainFrame
  • Java-继承
  • 隐马尔可夫模型:语音识别系统的时序解码引擎
  • nginx部署发布Vite项目
  • 苹果系统查看已连接Wi-Fi密码的实用指南
  • 408第三季part2 - 计算机网络 - 物理层
  • HarmonyOS学习2---工程目录UIAbility
  • 零基础保姆级本地化部署文心大模型4.5开源系列
  • c++文字游戏_闯关打怪
  • stm32的三种开发方式
  • 【论文解读】Referring Camouflaged Object Detection
  • Web3 Study Log 003
  • 《深度剖析:5G网络切片如何精准保障不同业务QoS需求》