紫砂壶网站开发与设计报告论文用于做网站的软件
紫砂壶网站开发与设计报告论文,用于做网站的软件,中学生网站源码,修改wordpress主题字体大小在 Data Structures and Algorithms 中#xff0c;**链表#xff08;Linked List#xff09;**是一种基础且非常重要的线性数据结构。与数组不同#xff0c;链表通过 节点之间的指针连接 来组织数据#xff0c;适合频繁插入和删除的场景。下面从 结构入门 → 分类 → 双向…在 Data Structures and Algorithms 中**链表Linked List**是一种基础且非常重要的线性数据结构。与数组不同链表通过节点之间的指针连接来组织数据适合频繁插入和删除的场景。下面从结构入门 → 分类 → 双向链表实现系统讲解。一、什么是链表Linked List链表由节点Node组成每个节点包含两部分数据(data) 指针(next)示意结构[ data | next ] → [ data | next ] → [ data | next ] → null特点特点说明非连续存储不像数组那样连续插入删除快O(1)查找慢O(n)二、链表与数组的区别特性数组链表内存连续不连续查找O(1)O(n)插入O(n)O(1)删除O(n)O(1)适用场景数组频繁查询链表频繁插入删除三、链表的分类链表根据结构可以分为链表 ├── 单向链表 ├── 双向链表 ├── 循环链表 └── 双向循环链表四、单向链表Singly Linked List结构head → node1 → node2 → node3 → null节点结构classNode:def__init__(self,data):self.datadata self.nextNone优点结构简单内存开销小缺点只能单向遍历五、双向链表Doubly Linked List双向链表每个节点包含prev ← node → next结构示意null ← node1 ↔ node2 ↔ node3 → null节点结构classNode:def__init__(self,data):self.datadata self.prevNoneself.nextNone优点可以双向遍历删除节点更方便缺点多一个指针占用更多内存六、循环链表Circular Linked List循环链表特点尾节点 → 指向头节点结构head → node1 → node2 → node3 ↑ ↓ └───────────────←────────┘应用操作系统调度约瑟夫问题七、双向链表初始化实现Python下面实现一个完整双向链表结构。1 定义节点classNode:def__init__(self,data):self.datadata self.prevNoneself.nextNone2 定义链表类classDoublyLinkedList:def__init__(self):self.headNone3 头插法definsert_head(self,data):new_nodeNode(data)ifself.head:self.head.prevnew_node new_node.nextself.head self.headnew_node示意new → head → node2 → node34 尾插法definsert_tail(self,data):new_nodeNode(data)ifnotself.head:self.headnew_nodereturntempself.headwhiletemp.next:temptemp.nexttemp.nextnew_node new_node.prevtemp5 遍历链表defdisplay(self):tempself.headwhiletemp:print(temp.data,end - )temptemp.nextprint(None)输出示例1 - 2 - 3 - None八、完整示例classNode:def__init__(self,data):self.datadata self.prevNoneself.nextNoneclassDoublyLinkedList:def__init__(self):self.headNonedefinsert_head(self,data):new_nodeNode(data)ifself.head:self.head.prevnew_node new_node.nextself.head self.headnew_nodedefinsert_tail(self,data):new_nodeNode(data)ifnotself.head:self.headnew_nodereturntempself.headwhiletemp.next:temptemp.nexttemp.nextnew_node new_node.prevtempdefdisplay(self):tempself.headwhiletemp:print(temp.data,end - )temptemp.nextprint(None)测试dllDoublyLinkedList()dll.insert_head(2)dll.insert_head(1)dll.insert_tail(3)dll.display()输出1 - 2 - 3 - None九、链表时间复杂度操作时间复杂度访问O(n)插入O(1)删除O(1)查找O(n)十、链表经典算法题链表是面试重点结构常见题包括反转链表合并两个有序链表链表是否有环找链表中间节点删除倒数第 N 个节点这些题在很多算法平台都会出现例如LeetCode总结链表结构可以总结为链表 ├ 单向链表 ├ 双向链表 ├ 循环链表 └ 双向循环链表核心特点动态结构插入删除效率高访问效率低双向链表则通过prev next提供更灵活的操作。如果你愿意我可以继续给你整理一份链表算法最全总结20道必会题 Python实现很多算法面试基本都会考到。