怎么创立链表?想要弄懂链表的创立,那么咱们首要的指标应该是搞懂什么叫做链表。那么说道链表,不得不提的就是数组了,那么什么是数组呢?python中是没有数组这个概念的,python中用列表和元组代替了这一概念。那么数组的特点是什么?
在内存地址中,它的表现形式是用一片间断的空间来存储数据,这个就是数组的概念,那么链表呢?
概念
链表是一种物理存储单元上非间断、非程序的存储构造,然而它还是属于一种线性表,因为在每一个节点外面都会寄存下一个节点的信息next。
单链表
每个节点蕴含两个局部,一部分存放数据变量的data,另一部分寄存下一个节点的地位信息next。
class Node(): """节点类""" def __init__(self, item, next=None): self.item = item self.next = nextclass LinkList(): """链表""" def __init__(self, node=None): self.head = node def is_empty(self): """判断链表是否为空""" return True if self.head else False def length(self): """返回链表长度""" num = 0 node = self.head if node == None: return num num += 1 while node.next: node = node.next num += 1 return num def add(self, item): """链表头部增加""" self.head = Node(item, self.head) def travel(self): """遍历整个链表""" node = self.head if node == None: return print(node.item) while node.next: node = node.next print(node.item) def addend(self, item): """链表尾部增加元素""" node = self.head if node == None: self.head = Node(item) return while node.next: node = node.next node.next = Node(item) def insert(self, index, item): """指定地位增加""" if index == 0: self.add(item) return node = self.head try: for i in range(index): node = node.next node.next = None(item, node.next) except: assert "索引超出范围" def remove(self, index): """删除指定节点""" if index == 0: self.head = self.head.next return node = self.head try: for i in range(index-1): node = node.next node.next = node.next.next except: assert "索引超出范围" def search(self, item): """查找节点是否存在""" index = 0 node = self.head while node.next: if node.item==item: return index index += 1 node = node.next return "该元素不存在"
双向链表
除了蕴含单链表的局部,还存储了一个前一个节点的地位信息prev。
class Node(): """节点类""" def __init__(self, item, per=None, next=None): self.per = per self.item = item self.next = nextclass LinkList(): """双向链表""" def __init__(self, node=None): self.head = node def is_empty(self): """判断链表是否为空""" return True if self.head else False def length(self): """返回链表长度""" num = 0 node = self.head if node == None: return num num += 1 while node.next: node = node.next num += 1 return num def add(self, item): """链表头部增加""" self.head = Node(item, next=self.head) def travel(self): """遍历整个链表""" node = self.head if node == None: return print(node.item) while node.next: node = node.next print(node.item) def addend(self, item): """链表尾部增加元素""" node = self.head if node == None: self.head = Node(item) return while node.next: node = node.next node.next = Node(item, node) def insert(self, index, item): """指定地位增加""" if index == 0: self.add(item) return node = self.head try: for i in range(index): node = node.next node.next = None(item, node, node.next) except: assert "索引超出范围" def remove(self, index): """删除指定节点""" if index == 0: self.head = self.head.next return node = self.head try: for i in range(index-1): node = node.next node.next = node.next.next except: assert "索引超出范围" def search(self, item): """查找节点是否存在""" index = 0 node = self.head while node.next: if node.item==item: return index index += 1 node = node.next return "该元素不存在"
循环链表
链表构造与之前一样,只是链表的最初一个next指向了链表头,造成了一个循环。
class Node(): """节点类""" def __init__(self, item, per=None, next=None): self.per = per self.item = item self.next = nextclass LinkList(): """循环链表""" def __init__(self, node=None): self.head = node def is_empty(self): """判断链表是否为空""" return True if self.head else False def length(self): """返回链表长度""" num = 0 node = self.head if node == None: return num num += 1 while node.next!=self.head: node = node.next num += 1 return num def add(self, item): """链表头部增加""" self.head = Node(item, per=self.head.per, next=self.head) def travel(self): """遍历整个链表""" node = self.head if node == None: return print(node.item) while node.next!=self.head: node = node.next print(node.item) def addend(self, item): """链表尾部增加元素""" node = self.head if node == None: node = Node(item) node.per=node node.next=node self.head = node return while node.next: node = node.next node.next = Node(item, node, node.next) def insert(self, index, item): """指定地位增加""" if index == 0: self.add(item) return node = self.head try: for i in range(index): node = node.next node.next = None(item, node, node.next) except: assert "索引超出范围" def remove(self, index): """删除指定节点""" if index == 0: self.head = self.head.next return node = self.head try: for i in range(index-1): node = node.next node.next = node.next.next node.next.per=node except: assert "索引超出范围" def search(self, item): """查找节点是否存在""" index = 0 node = self.head while node.next: if node.item==item: return index index += 1 node = node.next return "该元素不存在"
链表,就是这么解释、创立的。