写在前面: 我是「虐猫人薛定谔i」,一个不满足于现状,有梦想,有追求的00后
\quad
本博客主要记录和分享自己毕生所学的知识,欢迎关注,第一时间获取更新。
\quad
不忘初心,方得始终。
\quad❤❤❤❤❤❤❤❤❤❤
设计要求
设计一个带头结点的单链表,实现以下功能:
- isEmpty:判断链表是否为空
- getLength:返回表长
- getElem:返回指定位置处的元素
- locateElem:定位元素
- priorElem:返回元素e的前驱
- nextElem:返回元素e的后继
- listInsert:插入元素
- listDelete:删除元素
- listTraverse:实现链表的遍历操作
编写主函数进行测试
代码
"""
带头结点的单链表
"""
# 结点类
class Node:
def __init__(self, data=None, Next=None):
self.data = data
self.next = Next
# 链表类
class LinkList:
def __init__(self, length=0):
self.length = length
self.head = Node()
def isEmpty(self):
return self.length == 0
def getLength(self):
return self.length
def getElem(self, pos):
if pos < 1 or pos > self.length:
return None
else:
p = self.head.next
cnt = 1
while p!= None:
if pos == cnt:
return p.data
p = p.next
cnt += 1
return None
def locateElem(self, e):
if self.length == 0:
return -1
else:
p = self.head.next
cnt = 1
while p != None:
if p.data == e:
return cnt
p = p.next
cnt += 1
return -1
def priorElem(self, e):
if self.head.next.data == e:
return False
else:
p = self.head
while p.next != None:
if p.next.data == e:
return p.data
p = p.next
return False
def nextElem(self, e):
p = self.head.next
while p != None:
if p.data == e:
if p.next != None:
return p.next.data
else:
return False
p = p.next
return False
def listInsert(self, pos, e):
if pos < 1 or pos > self.length + 1:
return False
else:
if self.head.next == None:
node = Node(e)
self.head.next = node
node.next = None
self.length += 1
return True
else:
p = self.head.next
q = self.head
cnt = 1
while q != None:
if cnt == pos:
node = Node(e)
q.next = node
node.next = p
self.length += 1
return True
q = p
p = p.next
cnt += 1
return False
def listDelete(self, pos):
if pos < 1 or pos > self.length:
return False
else:
p = self.head.next
q = self.head
cnt = 1
while p != None:
if cnt == pos:
q.next = p.next
self.length -= 1
return True
q = p
p = p.next
cnt += 1
return False
def listTraverse(self):
p = self.head.next
flag = True
while p != None:
if flag:
flag = False
print(p.data, end=' ')
else:
print('->', p.data, end=' ')
p = p.next
print('')
# 测试
def main():
linkList = LinkList()
if linkList.isEmpty():
print("---- 链表为空 ----")
for i in range(10):
linkList.listInsert(linkList.getLength()+1, i)
print("第%d个位置的元素为:" % (i+1), linkList.getElem(i+1))
linkList.listTraverse()
if linkList.listInsert(1, 100):
print("---- 插入成功 ----")
linkList.listTraverse()
else:
print("---- 插入失败 ----")
if linkList.listDelete(1):
print("---- 删除成功 ----")
linkList.listTraverse()
else:
print("---- 删除失败 ----")
print("元素6的位置是:%d,其前驱元素是:%d,其后继元素是:%d" % (linkList.locateElem(6), linkList.priorElem(6), linkList.nextElem(6)))
linkList.listInsert(3, 100)
linkList.listTraverse()
if __name__ == "__main__":
main()
测试
蒟蒻写博客不易,如果有误还请大佬们提出
如需转载,请署名作者并附上原文链接,蒟蒻非常感激
名称:虐猫人薛定谔i
博客地址:https://blog.csdn.net/Deep___Learning