写在前面: 我是「虐猫人薛定谔i」,一个不满足于现状,有梦想,有追求的00后
\quad
本博客主要记录和分享自己毕生所学的知识,欢迎关注,第一时间获取更新。
\quad
不忘初心,方得始终。
\quad❤❤❤❤❤❤❤❤❤❤
设计要求
设计一个带表头的双向链表,提供以下方法:
(1)insert_by_pos:在某个位置插入;
(2)insert:在链表的最后插入;
(3)delete_by_pos:在某个位置删除;
(4)delete:删除链表中与x相同的元素;
(5)getSize:返回当前链表中元素的个数;
(6)isEmpty:判断链表是否为空;
(7)traverse:遍历链表,打印出所有的元素;
(8)getData:取得某个位置的元素。
构造main函数进行测试。
代码
# 结点类
class Node:
def __init__(self, data, Pre=None, Next=None):
self.pre = Pre
self.next = Next
self.data = data
# 双向链表类
class DoubleLinkedList:
def __init__(self):
self.size = 0
self.head = Node(-1)
def getSize(self):
return self.size
def isEmpty(self):
return self.size == 0
def traverse(self):
if self.head == None:
return False
else:
p = self.head.next
while p != None:
print(p.data, end=' ')
p = p.next
print('')
return True
def getData(self ,pos):
if pos <1 or pos > self.size:
return None
else:
cnt = 1
p = self.head.next
while p != None:
if cnt == pos:
return p.data
p = p.next
cnt += 1
return None
def insert_by_pos(self, pos, data):
if pos < 1 or pos > self.size + 1:
return False
elif pos == 1:
q = Node(data)
self.head.next.pre = q
q.next = self.head.next
q.pre = self.head
self.head.next = q
self.size += 1
return True
else:
cnt = 1
p = self.head.next
while p != None:
if cnt == pos:
q = Node(data)
p.pre.next = q
q.pre = p.pre
q.next = p.next
p.next.pre = q
self.size += 1
return True
p = p.next
cnt += 1
return False
def insert(self, data):
if self.size == 0:
q = Node(data)
self.head.next = q
q.pre = self.head
self.size += 1
return True
else:
p = self.head
while p.next != None:
p = p.next
q = Node(data)
p.next = q
q.pre = p
self.size += 1
return True
def delete(self, x):
if self.size == 0:
return False
else:
p = self.head.next
while p != None:
if p.data == x:
p.pre.next = p.next
p.next.pre = p.pre
self.size -= 1
return True
p = p.next
return False
def delete_by_pos(self, pos):
if pos < 1 or pos > self.size:
return False
else:
p = self.head.next
cnt = 1
while p != None:
if pos == cnt:
p.pre.next = p.next
p.next.pre = p.pre
self.size -= 1
return True
p = p.next
cnt += 1
return False
# 测试
def main():
dll = DoubleLinkedList()
for i in range(10):
dll.insert(i)
if dll.isEmpty():
print("链表已经空了")
else:
print("链表中元素的数量为:", dll.getSize())
dll.traverse()
if dll.insert_by_pos(1, 100):
print("---- 插入成功 ----")
else:
print("---- 插入失败 ----")
dll.traverse()
for i in range(1, dll.getSize()+1):
print("第%d个位置的元素为:" % i, dll.getData(i))
if dll.delete_by_pos(5):
print("删除成功")
dll.traverse()
else:
print("删除失败")
if dll.insert_by_pos(1, 100):
print("插入成功")
dll.traverse()
else:
print("插入失败")
if dll.delete(6):
print("删除成功")
dll.traverse()
else:
print("删除失败")
if __name__ == '__main__':
main()
测试


蒟蒻写博客不易,如果有误还请大佬们提出
如需转载,请署名作者并附上原文链接,蒟蒻非常感激
名称:虐猫人薛定谔i
博客地址:https://blog.youkuaiyun.com/Deep___Learning
本文介绍了如何设计一个带表头的双向链表,包括插入、删除、获取大小、判断空链表、遍历和获取指定位置元素等操作。提供了相应的代码实现,并鼓励读者进行测试与交流。
1528

被折叠的 条评论
为什么被折叠?



