链表
链表是由一系列节点组成的元素集合.每个节点包含两部分,数据域item和指向下一个节点的指针next.通过节点之间的相互连接,最终串联成一个链表.
# 节点的实现
class Node():
def __init__(self, item):
self.item = item
self.next = None
链表的创建和遍历
class Node():
def __init__(self, item):
self.item = item
self.next = None
def create_linklist_head(li):
#头插法
head = Node(li[0])
for ele in li[1:]:
node = Node(ele)
node.next = head
head = node
return head
def create_linklist_tail(li):
# 尾插法
head = Node(li[0])
tail = head
for ele in li[1:]:
node = Node(ele)
tail.next = node
tail = node
return head
# 链表的遍历
def print_linklist(lk):
while lk:
print(lk.item, end=',')
lk = lk.next
链表节点的插入
p.next = curNode.next
curNode.next = p
链表节点的删除
删除掉当前节点curNode的下一个节点
p = curNode.next
curNode.next = curNode.next.next
del p
双链表
双链表的每个节点有两个指针:一个指向后一个节点,另一个指向前一个节点
class Node():
def __init__(self,item=None):
self.item = item
self.next = None
self.prior = Node
# 双链表节点的插入
p.next = curNode.next
curNode.next.prior = p
curNode.next = p
p.prior = curNode
# 双链表节点的删除
p = curNode.next
curNode.next = p.next
p.next.prior = curNode
del p
小结
(1)链表在插入和删除上的操作明显快于顺序表,因为其内存地址不是连续的,不需要在插入和删除后将其他元素位置变动.
(2)链表的内存可以更灵活的分配
(3)链表这种链式存储的数据结构对树和图的结构有很大的启发性.