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

算法竞赛阶段二-数据结构(37)数据结构动态链表list

动态链表(List)的基本概念

动态链表是一种线性数据结构,通过节点间的指针连接实现动态内存分配。与数组不同,链表的大小可随需增减,插入和删除操作的时间复杂度为 O(1)(已知位置时),但随机访问需要 O(n) 时间。

常见动态链表类型

  1. 单向链表
    每个节点包含数据和指向下一个节点的指针。

    class Node:def __init__(self, data):self.data = dataself.next = None
    

  2. 双向链表
    节点包含指向前驱和后继的指针,支持双向遍历。

    class Node:def __init__(self, data):self.data = dataself.prev = Noneself.next = None
    

  3. 循环链表
    尾节点指向头节点,形成闭环。

动态链表的操作

插入节点
在头部插入:

new_node = Node(data)
new_node.next = head
head = new_node

在中间插入(已知前驱节点 prev_node):

new_node.next = prev_node.next
prev_node.next = new_node

删除节点
删除头节点:

head = head.next

删除中间节点(已知前驱节点 prev_node):

prev_node.next = prev_node.next.next

动态链表的优缺点

优点

  • 内存按需分配,避免静态数组的浪费。
  • 插入/删除高效,无需移动其他元素。

缺点

  • 随机访问效率低。
  • 需要额外空间存储指针。

动态链表的应用场景

  • 实现栈、队列等抽象数据类型。
  • 内存管理中的动态分配(如操作系统的空闲内存块管理)。
  • 需要频繁插入/删除的场景(如实时系统)。

示例:单向链表的完整实现

class LinkedList:def __init__(self):self.head = Nonedef append(self, data):new_node = Node(data)if not self.head:self.head = new_nodereturnlast = self.headwhile last.next:last = last.nextlast.next = new_nodedef print_list(self):current = self.headwhile current:print(current.data, end=" -> ")current = current.nextprint("None")

注意事项

  • 动态链表需手动管理内存(如 C/C++ 中需释放节点)。
  • 在 Python/Java 等语言中,垃圾回收机制自动处理内存释放。
http://www.dtcms.com/a/300774.html

相关文章:

  • QT开发---网络编程下
  • 《C++》STL--string详解(上)
  • Linux文件理解,基础IO理解
  • 怎样让阿里云服务器(centos)有界面
  • 网络协议:计算机世界的“交通规则“与“社交礼仪“
  • i节点学习
  • Qt 分裂布局:QSplitter 使用指南
  • C语言——————学习笔记(自己看)
  • 基于多智能体的任务管理系统架构设计与实现
  • 北大区块链技术与应用 笔记
  • [STM32][HAL]stm32wbxx 超声波测距模块实现(HY-SRF05)
  • 【基础完全搜索】USACO Bronze 2022 Open - 谎言的人数Counting Liars
  • 元宇宙背景下治理模式:自治的乌托邦
  • JavaSE-String类
  • 【Ollama】大模型本地部署与 Java 项目调用指南
  • Wireshark TS | 发送数据超出接收窗口
  • C++核心编程学习-- 类和对象--继承
  • PROFINET转CAN通讯协议转换速通汽车制造
  • 简单题目之学校组织运动会
  • 【通识】线性代数(Linear Algebra)
  • 【C++】论如何封装红黑树模拟实现set和map
  • 【Java实例】服务器IP一站式管理
  • 新手向:IDM下载失败排查
  • 依赖倒置原则 Dependency Inversion Principle - DIP
  • MySQL 索引设计与查询性能优化实践指南
  • Chainlink Functions:为智能合约插上连接现实世界的翅膀
  • 【Redis】Redis 协议与连接
  • 使用低级上位画图法理解在对磁盘空间进行容量分配时【低级单位上位至高级单位的换算】
  • 系统集成项目管理工程师【第九章 项目管理概论】 - 项目管理过程组
  • Frontiers in Psychology投稿流程(一)