链表
1 链表定义
无序链表是元素的集合,其中每一个元素都有相对于其他元素的位置。支持以下操作:
2 代码实现
2.1 Node类实现
Node类具有两个数据成员,data和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):
self.next = newnext
2.2 UnorderedList类实现
class UnorderedList:
def __init__(self):
self.head = None
def isEmpty(self):
return self.head == None
# 头节点的Data也有值,head是第一个元素
def add(self, item):
temp = Node(item)
temp.setNext(self.head)
self.head = temp
def length(self):
current = self.head
count = 0
while current != None:
count = count + 1
current = current.getNext()
return count
def showlist(self):
current = self.head
tag = 0
while tag < self.length():
print(current.getData())
current = current.getNext()
tag = tag + 1
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):
current = self.head
previous = None
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())
def insert(self, pos, item):
if(pos == 1):
self.add(item)
elif(1 < pos < self.length()):
current = self.head
tag = 1
while tag < pos-1 and tag < self.length():
current = current.getNext()
tag = tag + 1
temp = Node(item)
temp.setNext(current.getNext())
current.setNext(temp)
else:
self.append(item)
def append(self, item):
current = self.head
count = 1
while count < self.length():
count = count + 1
current = current.getNext()
temp = Node(item)
current.setNext(temp)
def index(self, item):
current = self.head
found = False
count = 1
while current != None and not found:
if current.getData() == item:
found = True
else:
current = current.getNext()
count = count + 1
return count
def pop(self):
current = self.head
count = 1
while count + 1 < self.length():
count = count + 1
current = current.getNext()
current.setNext(None)
def pop(self, index):
current = self.head
tag = 1
while tag < index-1 and tag < self.length():
current = current.getNext()
tag = tag + 1
dell = current.getNext()
current.setNext(dell.getNext())
代码测试
l1 = UnorderedList()
l1.showlist()
l1.add(1)
l1.add(2)
l1.add(3)
l1.showlist()
3
2
1
l1.insert(2, 4)
l1.showlist()
3
4
2
1
l1.append(5)
l1.showlist()
3
4
2
1
5
l1.pop(2)
l1.showlist()
3
2
1
5
print('链表长度是:',l1.length())
链表长度是: 4
print('2的位置是:', l1.index(2))
2的位置是: 2
l1.showlist()
3
2
1
5
print(l1.isEmpty())
False