class Node:
def __init__(self, data):
self.data = data
self.next = None
class Linklist:
def __init__(self, node=None):
self.size = 0
self.head = node
def is_empy(self):
return self.size == 0
#循环遍历
def show(self):
if self.is_empy():
print('遍历失败')
return
else:
q = self.head
if q.next is None:
print(q.data)
else:
while q is not None:
print(q.data, end=' ')
q = q.next
#头填
def add_head(self, value):
node = Node(value)
node.next = self.head
self.head = node
self.size = self.size + 1
#尾填
def add_tail(self, value):
node = Node(value)
p = self.head
if p is None:
self.head = node
else:
while p.next is not None:
p = p.next
p.next = node
self.size = self.size + 1
#任意添加
def add_ry(self, sice, value):
node = Node(value)
if self.size + 1 < sice:
print('不能插入')
else:
if sice >= 2:
p = self.head
while sice - 2:
p = p.next
sice = sice - 1
node.next = p.next
p.next = node
self.size = self.size + 1
else:
self.add_head(value)
#头删
def remove_head(self):
self.head = self.head.next
self.size = self.size - 1
#删尾
def remove_tail(self):
a = self.size
if a == 1:
self.remove_head()
else:
p = self.head
while a - 2:
p = p.next
a -= 1
p.next = None
self.size -= 1
#任意删除
def remove_ry(self, sice):
if sice > self.size:
print('删除操作错误')
else:
if sice == 1:
self.remove_head()
else:
p = self.head
while sice - 2:
p = p.next
sice -= 1
p.next = p.next.next
self.size -= 1
#按位置替换
def replace_wzh(self, sice, data):
if sice > self.size:
print('删除操作错误')
else:
if sice == 1:
self.head.data = data
else:
p = self.head
while sice - 2:
p = p.next
sice -= 1
p.data = data
#按值替换
def replace_zh(self, data, new):
if self.is_empy():
print('失败')
return
else:
q = self.head
if q.data == data:
q.data = new
else:
while q is not None:
q = q.next
if q.data == data:
q.data = new
break
#按值查询
def find_zh(self, data):
if self.is_empy():
print('失败')
return
else:
a = 2
q = self.head
if q.data == data:
print(f'{data}在1处出现')
else:
while q is not None:
q = q.next
if q.data == data:
print(f'{data}在{a}处出现')
break
a = a + 1
#链表倒叙
def reverse(self):
p = None
q = self.head
while q:
next_node = q.next
q.next = p
p = q
q = next_node
self.head = p
if __name__ == '__main__':
links = Linklist()
links.add_tail(50)
links.add_head(10)
links.add_head(20)
links.add_head(30)
links.add_head(40)
links.add_tail(50)
links.show()
links.add_ry(7, 89)
print()
links.show()
links.remove_head()
print()
links.show()
links.remove_tail()
print()
links.show()
links.remove_ry(5)
print()
links.show()
links.remove_ry(2)
print()
links.show()
links.add_head(30)
links.add_head(40)
links.add_tail(50)
#任意位置改
links.replace_wzh(1, 89)
print()
links.show()
#安值修改
links.replace_zh(89, 39)
print()
links.show()
print()
links.find_zh(10)
links.reverse()
print()
links.show()
python链式表基本操作练习
于 2024-11-22 20:46:30 首次发布