数据结构与算法(9)——无序表List

  • 列表基本定义

列表:一种数据按照相对位置存放的数据集。

无序表:数据的排列不具有顺序性,只按照存放位置来索引。

 

 

  • 无序表的操作

这部分比较熟悉,在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

 

 

参考:https://www.bilibili.com/video/BV1QJ411w7bB?p=28

 

posted @ 2020-03-31 02:03  Yelush  阅读(680)  评论(0)    收藏  举报