- 列表基本定义
列表:一种数据按照相对位置存放的数据集。
无序表:数据的排列不具有顺序性,只按照存放位置来索引。
- 无序表的操作
这部分比较熟悉,在python里面有list类型。
append(item) | 在数据末尾添加一个数据项 |
index(item) | 返回数据项在表中的索引 |
insert(pos,item) | 将数据项插入到位置pos |
pop() | 从列表末尾移除数据项 |
pop(pos) | 移除位置为pos的数据项 |
由于无序表并不要求数据项依次存放在连续的存储空间,因此可采用链表实现无序表。
- 链表
链表:数据项存放位置并没有规则,但如果在数据项之间建立链接指向,则可以保持其前后相对位置。
链表内包含很多结点。其中每个结点的数据空间一般会包含一个数据结构(用于存放各种类型的数据)以及一个指针,该指针一般称为next,用来指向下一个结点的位置。每个节点至少要包含2个信息:数据项本身,以及指向下一个节点的引用信息。当next为None则表示没有下一个节点了。
用python对链表的实现:
1 class Node: 2 def __init__(self,initdata): 3 self.data = initdata 4 self.next = None 5 def getData(self): #返回数据项 6 return self.data 7 def getNext(self): #返回下一个节点 8 return self.next 9 def setData(self,newdata): #修改数据项 10 self.data = newdata 11 def setNext(self,newnext): #修改指向引用 12 self.next = newnext
用链表Node实现一个无序表:
1 class UnorderedList(): 2 def __init__(self): 3 self.head = None #这里首先需要定义无须表的表头head属性,保存对第一个节点对的引用空表head为None. 4 def isEmpty(self): 5 return self.head == None 6 def add(self, item): 7 temp = Node(item) 8 temp.setNext(self.head) 9 self.head = temp 10 def size(self): 11 current = self.head 12 count = 0 13 while current != None: 14 count += 1 15 current = current.getNext() 16 return count 17 18 def search(self,item): 19 current = self.head 20 found = False 21 while current != None and not found: 22 if current.getData() == item: 23 found = True 24 else: 25 current = current.getNext() 26 return found 27 def remove(self,item): 28 ''' 29 1.将当前节点的前一个节点与当前节点的后一个节点连接,则执行删除了 30 2.如何第一个就是要删除的,就把第一个节点的表头指向下一个就可以了 31 ''' 32 current = self.head 33 previous = None 34 found = False 35 while not found: 36 if current.getData() == item: 37 found = True 38 else: #往后遍历查找 39 previous = current 40 current = current.getNext() 41 if previous == None: 42 self.head = current.getxNet 43 else: 44 previous.setNext(current.getNext()) #把previous的下一个指向current下一个即可 45 s = UnorderedList() 46 s.add(5) 47 s.add(6) 48 s.add(7) 49 print(s.head.getData()) 50 print(s.search(6)) 51 print(s.size()) 52 s.remove(5) 53 print(s.head.getData())
[OUT] 7 True 3 7 Process finished with exit code 0