类是一种数据类型,当我们不知道怎么定义一个数据类型的时候,那这个时候就一定要想到类充当包裹,类中不仅可以存放数据,也可以把那些方法也放进去
直接看代码和注释方便理解
# 定义节点,节点存有数据和next指针
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):
# 这里的next可是是任何的数据类型包括和自身相同属性的node
self.next = newnext
# 定义有序链,该链是基于上面定义的node的数据类型
class OrderedList:
# 当class实例化对象的时候执行初始化函数,定义头指针指向空
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 current.getData() == item:
found = True
else:
# 从头结点一直next寻找,如果链中的一个node的数值大于要找的值则stop,说明该链中不存在该item,后面的node也不可能会出现该item
if current.getData() > item:
stop = True
else:
# 继续移动next结点
current = current.getNext()
return found
def add(self,item):
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()
# 新增一个node
temp = Node(item)
if previous == None:
temp.setNext(self.head)
self.head = temp
else:
# 将该新node连如链中
temp.setNext(current)
previous.setNext(temp)
def isEmpty(self):
return self.head == None
def length(self):
# 计算这个有序列表的长度
current = self.head
count = 0
while current != None:
count = count + 1
current = current.getNext()
return count
# traverse 穿过,将这个有序列表的全部元素打印出来
def traverse(self):
current = self.head
while current != None:
print(current.getData())
current = current.getNext()
mylist = OrderedList()
mylist.add(31)
mylist.add(77)
mylist.add(17)
mylist.add(93)
mylist.add(26)
mylist.add(54)
print(mylist.length())
print(mylist.search(93))
print(mylist.search(100))
mylist.traverse()
效果