## SinglyLinkedNode 单链表结点
```python
class SinglyLinkedNode:
"""单链表结点"""
__slots__ = "value", "next" # 使用__slots__减少内存占用
def __init__(self, value, next: "SinglyLinkedNode" = None):
self.value = value # 数据域
self.next = next # 指针域
def __str__(self):
return str(self.value) + "->" + str(self.next)
```
## SinglyLinkedOperate 单链表的基本操作:读取、插入、删除、整表创建
```python
from typing import List
from LinkedList.SinglyLinkedNode import SinglyLinkedNode
# 单链表的读取(给定读取坐标)
def get_node_by_index(head: "SinglyLinkedNode", index: int):
for _ in range(index + 1): # 寻找第index个结点(从0开始计数)的前一个结点,如果链表长度不足则不删除
if not head.next:
return None
head = head.next
else:
return head.value
# 单链表的添加操作(在给定结点后添加)
def add_node_by_prev(prev: "SinglyLinkedNode", value):
node = SinglyLinkedNode(value) # 使用给定值初始化新结点(node)
node.next = prev.next # 令新结点(node)指向给定结点(prev)的下一个结点
prev.next = node # 令给定结点(prev)指向新结点(node)
# 单链表的添加操作(给定插入坐标)
def add_node_by_index(head: "SinglyLinkedNode", index: int, value):
idx = -1 # 因为从头结点开始遍历,故使用头结点的坐标-1
while idx < index and head.next: # 寻找第index个结点(从0开始计数),如果链表长度不足则添加在链表尾部
head = head.next
idx += 1
add_node_by_prev(head, value) # 在第index个结点后添加新结点
# 单链表的删除操作(在给定结点后删除)
def delete_node_by_prev(prev: "SinglyLinkedNode"):
prev.next = prev.next.next # 令给定结点(prev)直接指向被删除结点的下一个结点
# 单链表的删除操作(给定删除坐标)
def delete_node_by_index(head: "SinglyLinkedNode", index: int):
for _ in range(index): # 寻找第index个结点(从0开始计数)的前一个结点,如果链表长度不足则不删除
if not head.next:
break
head = head.next
else:
delete_node_by_prev(head)
# 单链表的整表创建
def build_singly_list_node(values: List):
node = head = SinglyLinkedNode(None) # 创建头结点,node指向尾结点(此时即头结点)
for value in values:
node.next = SinglyLinkedNode(value) # 创建新结点,并令当前链表尾部的终端结点指向新结点
node = node.next # node重新指向尾结点(即新创建的节点)
return head
```
## SinglyLinkedList 管理单链表的基本类:读取、插入、删除
```python
from LinkedList.SinglyLinkedNode import SinglyLinkedNode
class SinglyLinkedList:
"""管理单向链表的基本类(使用头结点)"""
def __init__(self):
"""初始化单向链表"""
self._head = SinglyLinkedNode(None) # 创建头结点
self._size = 0
def __len__(self):
"""返回链表中元素的数量"""
return self._size
def is_empty(self):
"""返回链表是否为空"""
return self._size == 0
def get(self, index: int):
"""依据坐标读取变量:返回链表中第index个元素的值"""
if index < 0 or index >= self._size:
return -1
curr = self._head
for _ in range(index + 1):
curr = curr.next
return curr.value
def add_at_head(self, value):
"""在头结点前添加结点"""
self.add_at_index(0, value)
def add_at_tail(self, value):
"""在尾结点之后添加结点"""
self.add_at_index(self._size, value)
def add_at_index(self, index: int, value):
"""在指定坐标前添加结点(若坐标无效则不添加):在链表中第index个元素前插入值为value的结点"""
if index < 0 or index > self._size:
return
self._size += 1
prev = self._head
for _ in range(index):
prev = prev.next
node = SinglyLinkedNode(value, prev.next)
prev.next = node
def delete_at_index(self, index: int):
"""依据坐标删除结点(若坐标无效则不删除)"""
if index < 0 or index >= self._size:
return
self._size -= 1
prev = self._head
for _ in range(index):
prev = prev.next
prev.next = prev.next.next
```
## DoublyLinkedNode 双链表结点
```python
class DoublySimplyListNode:
"""双链表结点"""
__slots__ = "value", "next", "prev" # 使用__slots__减少内存占用
def __init__(self, value, next: "DoublySimplyListNode" = None, prev: "DoublySimplyListNode" = None):
self.value = value
self.next = next
self.prev = prev
def __str__(self):
if self.next and self.next.value:
return str(self.value) + "<->" + str(self.value)
else:
return str(self.value) + "<->" + "None"
```
## DoublyLinkedOperate 双链表的基本操作:插入、删除、整表创建
```python
from typing import List
from LinkedList.DoublyLinkedNode import DoublySimplyListNode
# 双链表的添加操作(在给定结点后添加)
def add_node_by_prev(prev: "DoublySimplyListNode", value):
node = DoublySimplyListNode(value) # 使用给定值初始化新结点(node)
node.prev = prev # 令新结点(node)的前驱指针指向给定结点(prev)
node.next = prev.next # 令新结点(node)的后续指针指向给定结点(prev)的后一个结点
prev.next = node # 令给定结点(prev)的后驱指针指向新结点
node.next.prev = node # 令后一个节点的前驱指针指向新结点
# 双链表的删除操作(删除给定结点)
def delete_node_by_node(node: "DoublySimplyListNode"):
node.prev.next, node.next.prev = node.next, node.prev # 令给定结点前一个结点的后驱指针指向给定结点的后驱结点,后一个结点的前驱指针指向给定结点的前驱结点
# 双链表的整表创建
def build_doubly_list_node(values: List):
node = head = DoublySimplyListNode(None) # 创建头结点,node指向尾结点(此时即头结点)
for value in values:
new = DoublySimplyListNode(value) # 创建新结点
new.prev = node # 令新结点的前驱指针指向当前节点
new.next = head # 令新结点的后继指针指向当前节点
node.next = new # 并令当前链表尾部的终端结点指向新结点
node = node.next # node重新指向尾结点(即新创建的节点)
head.prev = node # 令头结点的前驱指针指向链表尾部的终端结点
return head
```
## DoublyLinkedList 管理双链表的基本类:插入、删除
```python
from LinkedList.DoublyLinkedNode import DoublySimplyListNode
class DoublyLinkedBase:
"""管理双向链表的基本类(使用双侧哨兵结点)"""
def __init__(self):
self._header = DoublySimplyListNode(None) # 头部哨兵结点
self._trailer = DoublySimplyListNode(None) # 尾部哨兵结点
self._header.next = self._trailer
self._trailer.prev = self._header
self._size = 0
def __len__(self):
"""返回链表中元素的数量"""
return self._size
def is_empty(self):
"""返回链表是否为空"""
return self._size == 0
def insert_between(self, value, prev, next):
"""向链表中添加新结点"""
node = DoublySimplyListNode(value, prev, next)
prev.next = node
next.prev = node
self._size += 1
return node
def delete_node(self, node):
"""从链表中删除结点"""
prev = node.prev
next = node.next
prev.next = next
next.prev = prev
self._size -= 1
value = node.val
没有合适的资源?快使用搜索试试~ 我知道了~
大话数据结构Python实现版配套源码_数据结构算法实现_链表栈队列串等核心数据结构Python实现_用于学习数据结构与算法Py...

共31个文件
py:16个
xml:5个
md:5个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 122 浏览量
2025-07-28
20:43:35
上传
评论
收藏 55KB ZIP 举报
温馨提示
大话数据结构Python实现版配套源码_数据结构算法实现_链表栈队列串等核心数据结构Python实现_用于学习数据结构与算法Python实现方式_包含单链表双链表顺序栈链式栈循.zip
资源推荐
资源详情
资源评论





























收起资源包目录








































共 31 条
- 1
资源评论


2501_91769822
- 粉丝: 970
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 2022年单片机原理与应用技术电子课件(1).ppt
- 电子商务产业园孵化企业入驻协议.doc
- 时空大数据服务方案.docx
- 网络安全演讲稿范文.doc
- 计算机基础题库管理系统.doc
- 外文翻译--单片机应用.doc
- 电子商务对现代平面广告设计的影响论文.doc
- 电子商务行业分析报告.docx
- 销售业绩统计分析表excel模板.xlsx
- 农资连x锁经营服务网络项目可行性研究报告.doc
- 某某电子科技有限责任公司系统集成安防工程质量环境职业健康安全程序文件.doc
- 项目一认识数据库系统讲义.ppt
- 网络路由协议的研究与应用.doc
- Unit4Understandingideas课件-高中英语外研版选择性.pptx
- 多载波DS-CDMA系统检测算法的研究.doc
- 网络编辑辞职报告范文.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
