链式结构内存不连续的,而是一个个串起来的,每个链接表的节点保存一个指向下一个节点的指针。
⭐ 链式结构包含:node(节点)还有value(值),由于内存不连续的,那么对于数据的插入,只需找到一个节点便可以插入数据,这也是链表优于列表的一个优点,反之,对于数据的删除,由于不是连续的,不能通过索引删除数据,只能一一遍历删除元素。 ⭐ 接下来上代码 单链表的增删功能
⭐ 接下来上代码 双链表的增删功能:- # 定义一个结点的类
- class Node():
- def __init__(self,value=None,node=None,next=None):
- self.value = value
- self.node = node
- self.next = next
- def __str__(self):
- return "Node:{}".format(self.value)
-
- # 定义一个连接点的类
- class DoubleLinkedList():
- def __init__(self):
- self.root = Node()
- self.size = 0
- self.end = None
-
- def append(self,value):
- node = Node(value)
- # 判断root节点下面是否有数据
- if not self.end: # 如果没有元素
- self.root.next = node # 将root 的下一个节点 设置为新的node节点
- node.prev = self.root # 设置新节点的 上一个节点 为 root
- else:
- self.end.next = node # 将原来最后节点的下一个节点 设置为新的node节点
- node.prev = self.end # 设置新节点的 上一个节点 为 原来的最后一个节点
- self.end = node # 更新最后 一个节点新加的node节点
- self.size += 1
-
- def append_first(self,value):
- node = Node(value) # 封装节点对象
- # 判断是否已经有数据
- if not self.end:# 如果没有元素
- self.end = node # 更新最后 一个节点新加的node节点
- else:
- # temp指向node,node指向root,root指向temp
- temp = self.root.next # 保存原来的第一个节点
- node.next = temp # 设置新节的下一个节为原来的 第一个节点
- temp.prev = node # 更新原来的第一个节点的上一个节点位置为 新的node节点
- node.prev = self.root # 设置新节点的 上一个节点 为 root
- self.root.next = node # 将root 的下一个节点 设置为新的node节点
- self.size += 1
- # 正序循环
- def __iter__(self):
- current = self.root.next
- if current:
- while current is not self.end:
- yield current.value
- current = current.next
- yield current.value
-
- # 倒叙循环
- def revers_iter(self):
- current = self.end #获取最后一节点
- if current:
- while current is not self.root:
- yield current
- current = current.prev
- if __name__ == "__main__":
- link = DoubleLinkedList()
- link.append('孙悟空')
- link.append('猪八戒')
- link.append_first('唐三藏')
- for v in link:
- print(v)
- print('-'*30)
- for v in link.revers_iter():
- print(v)
-
-
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |