数据结构之链表
链表是节点的集合,节点中储存着数据并链接到其它的节点。通过这种方式,节点可以位于内存中的任何位置,不用像数组一样在计算机内存中以相同的距离间隔开。链表中的每个节点都储存着链表中其它节点的地址,很容易从一个节点到达另一个节点。
如果一个节点将指向另一个节点的指针作为数据成员,那么多个这样的节点连接起来,由第一个节点就能访问整个节点序列。这种节点序列是最常用的链表实现方法。如果链表中只包含指向后继节点的链接,该链表就称为单向链表。如下图所示
单链表所具备的操作
- 开头设置一个head节点,始终指向第一个节点
- 每个节点类应该包含data 储存信息,next 指向下一个节点的地址
- 判断链表的长度
- 将元素添加到链表中
- 删除表中的元素
- 判断一个表是不是空的
- 给定元素,查找其在链表中的位置
单链表的python实现
class node:
"""
创建链表的节点
包含data储存的数据和next指向下一个节点
"""
def __init__(self, data, pnext = None):
self.data = data
self.next = pnext
class LList:
"""
链表类
包含 插入、删除、查找 等操作
"""
def __init__(self, data = None):
#这里可以列表初始化链表哦
self.head = None
self.length = 0
if data :
p = node(data)
self.head = p
self.length += 1
def isEmpty(self):
return self.length == 0
def Append(self, data):
#感兴趣的小伙伴们可以思考一下如何通过索引插入
if not self.head:
self.head = node(data)
else:
p = self.head
while p.next:
p = p.next
p.next = node(data)
self.length += 1
def delete(self, index):
if index < 0 or index > self.length:
print("Out of Index!")
return False
if index == 0:
self.head = self.head.next
self.length -= 1
return True
i, p = 0, self.head
while i+1 < index:
i = i + 1
p = p.next
p = p.next.next
self.length -= 1
def find(self, data):
p = self.head
i = 1
while p != None and p.data != data :
p = p.next
i = i+1
if p == None : return -1
else : return i
def Print(self):
p = self.head
while p:
print(p.data)
p = p.next
以上就是关于链表的全部内容了,其实还可以自定义很多操作,小伙伴们赶紧动起手来
欢迎关注公众号:数学算法实验室
专注于 算法、数学、机器学习