数据结构与算法(python版)之表
一、无序表
1.什么是无序表
一种数据项按照相对位置存放的数据集,特别的被称为无序表。其中数据项只按照存放位置来索引,如第一个、第二个…最后一个等。如一个考试分数的集合“54,26,93,17,77和31”,用无序表表示为[54,26,93,17,77,31]。列表List就是一种无序表。
2.无序表List的操作
3.采用链表实现无序表
为了实现无序表数据结构,可以采用连接表的方案。
虽然列表数据结构要求保持数据项的前后相对位置,但这种前后相对位置的保持并不要求数据项依次存放在连续的存储空间。
如下图,数据项存放位置并没有规则,但如果在数据之间建立链接指向,就可以保持其前后相对位置。
(1)链表实现:节点Node
①Node的定义
②Node的实现
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
(2)节点实现无序表
(3)无序表的部分实现程序:
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
class UnorderedList:
def __init__(self):
self.head=None
def add(self,item):
#创建节点
temp=Node(item)
temp.setNext(self.head)
self.head=temp
def size(self):
current=self.head
count=0
while current.next!=None:
count=count+1
current=current.getNext()
return count
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):
previous=None
current=self.head
found=False
#查找并记录previous和current
while not found and current!=None:
if current.getData()==item:
found=True
else:
previous=current
current=current.getNext()
if previous==None:
self.head=current.getNext()
else:
previous.setNext(current.getNext())
二、有序表
1.什么是有序表
有序表是一种数据项依照其某可比性质(如整数大小、字母表先后)来决定在链表中的位置。
越“小”的数据越靠近链表的表头,越靠“前”。
2.有序表OrderedList的操作
3.有序表OrderedList的实现
3.有序表的部分实现程序
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
class OrderList:
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:
if current.getData>item:
stop=True
else:
current = current.getNext()
return found
def add(self, item):
previous = None
current = self.head
stop=False
# 查找并记录previous和current
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)