Python数据结构与算法——Day3
程序员文章站
2022-05-26 16:11:14
...
Python数据结构与算法——Day3
单向链表
单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
- 表元素域elem用来存放具体的数据
- 链接域next用来存放下一个节点的位置(地址)
- 变量p指向链表的头节点,从p出发就能找到表中的任意节点
节点实现
# 节点类
class Node:
def __init__(self,item):
self.item=item
self.next=None
# 单链表类
class Link:
def __init__(self):
self.head=None
def is_empty(self):
return self.head==None
def length(self):
cur=self.head
count=0
while cur!=None:
count=count+1
cur=cur.next
return count
def travel(self): # 链表遍历
cur=self.head
while cur!=None:
print(cur.item)
cur=cur.next
print("")
def add(self,item):
newNode=Node(item)
newNode.next=self.head
self.head=newNode
print("done")
def append(self,item):
newNode=Node(item)
if self.is_empty():
self.head=newNode
else:
cur=self.head
while cur.next!=None:
cur=cur.next
cur.next=newNode
print("done")
def insert(self,pos,item):
if pos<=0:
self.add(item)
elif pos>(self.length()-1):
self.append(item)
else:
newNode=Node(item)
cur=self.head
count=0
while count<(pos-1):
cur=cur.next
count+=1
newNode.next=cur.next
cur.next=newNode
print("done")
def remove(self,item):
cur=self.head
pre=None
while cur!=None:
if cur.item==item:
if not pre:
self.head=cur.next
else:
pre.next=cur.next
break
else:
pre=cur
cur=cur.next
def search(self,item):
cur=self.head
while cur!=None:
if cur.item==item:
return True
else:
cur=cur.next
return False
链表与顺序表对比
链表失去了顺序表随机读取的优点,同时由于链表增加了节点的指针域,空间开销大,但对于存储空间的运用比较灵活,即,链表可利用离散的内存空间而顺序表存储元素信息的空间必须是连续的
链表和顺序表的时间复杂度
链表和顺序表在插入和删除时进行的操作侧重点时不同的。链表主要耗时在遍历查找部分,本身的插入和删除的时间复杂度为O(1),而顺序在插入或删除时主要侧重对元素的移位操作,这种操作是通过拷贝和覆盖完成的
上一篇: 一文彻底搞懂Kotlin中的委托