节点的实现
数据项存放位置没有规则,但在数据项之间建立连接指向,可以保持其前后相对位置。
先实现 节点 这个元素:
class Node:
def __init__(self,data):
self.data = data
self.next =None
def getdata(self):
return self.data
def getnext(self):
return self.next
def setdata(self,idata):
self.data=idata
def setnext(self,newnext):
self.next=newnext
节点结束之后开始到链表(无序表)的实现,
链表的实现
1、链表由节点组合:最重要节点,第一个节点和最后一个节点;
2、实现的核心功能有几个:添加元素add,打印链表所有元素showTheList,寻找列表中是否有item,删除列表中的item。
class UnorderedList:
def __init__(self):
self.head=None
def add(self,item):
atemp=Node(item)
atemp.setnext(self.head)
self.head=atemp
def size(self):
num=0
temp=self.head
while temp!=None:
num=num+1
temp=temp.getnext()
return num
def showTheList(self):
outlist=[]
temp=self.head
while temp!=None:
outlist.append(temp.getdata())
temp=temp.getnext()
return outlist
def search(self,item):
current=self.head
found=False
while current!=None and not found:
if current.getdata()==item:
found=True
else:
current=current.getnext()
return found
def remove(self,item):
current = self.head
previous=None
found = False
while current != None and not found:
if current.getdata() == item:
found = True
else:
previous=current
current = current.getnext()
if not found:
print("not exist")
elif previous==None:
self.head=current.getnext()
else:
previous.setnext(current.getnext())
注意细节:
1、第一个节点比较重要,所有只需要添加head属性,是对第一个节点的引用,初始为None;
2、其中search函数和remove函数稍微复杂一点,注意其中found=False的用法;
3、删除函数需要技巧,就是记住current节点的previous节点,但是current是首节点时又不太好表现,所以一开始设置previous=None;