链表与其他数据结构例如列表的区别在于无需使用连续存储空间。
链表在添加和删除数据时对原有数据移动小,但查寻和遍历较慢。
1.单链表的实现
1.1 定义结点
##3.1Node定义
class Node:
def __init__(self,initdata):
self.data=initdata
self.next=None
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self,newdata):
self.data=newdata
def setNext(self,newnext):
self.next=newnext
1.2 实现无序表(数据项乱序)
class UnroderedList:
def __init__(self):
self.head=None#表头,指向第一个结点
def isEmpty(self):
return self.head==None
def add(self,item):
node=Node(item)
node.setNext(self.head)#新节点next指向原head
self.head=node#表头指向新数据
def size(self): #o(n)
currentdata=self.head #当前节点指向表头
count=0
while currentdata!=None:#向后遍历
count += 1
currentdata=currentdata.getNext()#当前结点后移
return count
def search(self,item):#是否存在
currentdata=self.head
found=False
while currentdata!=None and not found:
if item==currentdata.getData():
found=True
else:
currentdata=currentdata.getNext()
return found
def remove(self,item):#寻找到item,使其前一个结点指向其下一个结点
currentdata=self.head
previous=None
found=False
while not found:
if item==currentdata.getData():
found=True
else:
previous=currentdata
currentdata=currentdata.getNext()
#删除操作的两种情况
if previous==None:#删除的是第一个元素
self.head=currentdata.getNext()
else:
previous.setNext(currentdata.getNext())
1.3 实现有序表
class OrderedList:
def __init__(self):
self.head=None
def search(self,item):
current=self.head
found=False
stop=False
while current!=None and not found and not stop:
if item==current.getData():
found=True
else:
if current>item:
stop=True
else:
current=current.getNext()
return found
def add(self,item):#引入previous,找到第一个比该值大的数则插入到previous位置
current=self.head
previous=None
stop=False
while current!=None and not stop:
if current.getData()>item:
stop=True
else:
previous=current
current=current.getNext()
temp=Node(item)
if previous==None:#插入表头
temp.setNext(self.head)
self.head=temp
else:#插入表中
temp.setNext(current)
previous.setNext(temp)