Python实现无序列表
文章目录
无序列表
无序列表由一个节点集合组成,每个节点采用显式引用链接到下一个节点。
无序列表操作
- unorderedList()
- add()
- remove()
- search()
- isEmpty()
- size()
- append()
- index(item)
- insert(pos, item)
- pop()
- pop(pos)
无序列表实现1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132# python实现无序列表
# Node 类
class Node():
def __init__(self, element):
self.data = element
self.next = None
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self, newelement):
self.data = newelement
def setNext(self, newnext):
self.next = newnext
# 无序列表类
class unorderedList():
# unorderedList要保持对列表头一个节点的引用
def __init__(self):
self.head = None
# 判断无序列是否为空,即列表头是否指向None
def isEmpty(self):
return self.head == None
# 添加add()方法
def add(self, item):
newNode = Node(item)
newNode.setNext(self.head)
self.head = newNode
# 添加size()方法,此过程需要遍历无序列表
def size(self):
current = self.head
count = 0
while current != None:
count += 1
current = current.getNext()
return count
# 添加search方法
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
# 添加remove()方法
def remove(self, item):
if not self.search(item):
return "The unorderedList don't contain this item!"
previous = None
current = self.head
found = False
while not found:
if current.getData() == item:
found = True
else:
previous = current
current = current.getNext()
# 要删除的节点为第一个节点
if previous == None:
self.head = current.getNext()
else:
previous.setNext(current.getNext())
# 添加append()方法
def append(self, item):
newNode = Node(item)
if self.head == None:
newNode.setNext(self.head)
self.head = newNode
else:
previous = None
current = self.head
while current != None:
previous = current
current = current.getNext()
previous.setNext(newNode)
# 添加index()方法
def index(self, item):
current = self.head
count = -1
while current != None:
count += 1
if current.getData() == item:
return count
current = current.getNext()
# 添加pop()方法
def pop(self):
previous = None
current = self.head
while current != None:
previous = current
current = current.getNext()
previous.setNext(None)
return previous.data
# 添加insert()方法
def insert(self, pos, item):
newNode = Node(item)
previous = None
current = self.head
for i in range(pos):
previous = current
current = current.getNext()
# in case of pos = 0
if previous == None:
newNode.setNext(self.head)
self.head = newNode
else:
previous.setNext(newNode)
newNode.setNext(current)
# traverse the unorderedList
def println(self):
current = self.head
lists = []
while current != None:
lists.append(current.data)
current = current.getNext()
print(lists)