'''
ADT -------Abstract Data Type
单链表
双端链表
双向链表
'''
'''
#双向链表----增删改查
class NullLinkedError(BaseException):
def __init_(self):
super().__init__("null linked error")
class node():
#content:创建节点,表示链表中元素,有三个属性
# pre-前驱结点地址
# data-数据
# next-后继节点地址
def __init__(self, data, pre=None, next=None):
self.__pre = pre
self.__data = data
self.__next = next
def get_data(self):
return self.__data
def set_data(self,data):
self.__data = data
def get_pre(self):
return self.__pre
def set_pre(self,pre):
self.__pre = pre
def get_next(self):
return self.__next
def set_next(self,next):
self.__next = next
class double_linked():
def __init__(self, len= 0, first= None, last= None):
self.__len = 0
self.__first = first
self.__last = last
def get_len(self):
return self.__len
def set_len(self,len):
self.__len = 0
def get_first(self):
return self.__first
def set_first(self,first):
self.__first = first
def get_last(self):
return self.__last
def set_last(self,last):
self.__last = last
#插入
def insert_first(self,data):
n = node(data = data)
#判断是否是空链表
if self.__len == 0:
self.__first = n
self.__last = n
else:
n.set_next(self.__first)
self.__first.set_pre(n)
self.__first = n
self.__len += 1
def insert_last(self,data):
n = node(data = data)
#判断是否是空链表
if self.__len == 0:
self.__first = n
self.__last = n
else:
n.set_pre(self.__last)
self.__last.set_next(n)
self.__last = n
self.__len += 1
def insert(self,data0,data):
n = node(data = data)
if self.__len == 0:
raise NullLinkedError()
else:
currentNode = self.__first
flag = False
while currentNode != None:
if currentNode.get_data() == data0:
if currentNode.get_next != None:
n.set_next(currentNode.get_next())
n.set_pre(currentNode)
currentNode.set_next(n)
currentNode.get_next().set_pre(n)
self.__len += 1
else:
self.insert_last(data)
flag = True
break
else:
currentNode = currentNode.get_next()
if flag:
print("该数据插入成功")
else:
print("该数据插入失败")
#删除头结点,若空则抛出异常,否则删除头元素
def delete_first(self):
if self.__len == 0:
raise NullLinkedError()
else:
if self.__len == 1:
self.__first = None
self.__last = None
else:
self.__first = self.__first.get_next()
self.__first.set_pre(None)
self.__len -= 1
#删除尾结点,若空则抛出异常,否则删除尾元素
def delete_last(self):
if self.__len == 0:
raise NullLinkedError()
else:
if self.__len == 1:
self.__first = None
self.__last = None
else:
self.__last = self.__last.get_pre()
self.__last.set_next(None)
self.__len -= 1
def delete(self,data):
if self.__len == 0:
raise NullLinkedError()
elif self.__len == 1:
if self.__first.get_data() == data:
self.__first = None
self.__last = None
self.__len -= 1
else:
currentNode = self.__first
while currentNode != None:
if currentNode.get_data() == data:
if currentNode.get_pre() == None:
self.delete_first()
elif currentNode.get_next() == None:
self.delete_last()
else:
currentNode.get_pre().set_next(currentNode.get_next())
currentNode.get_next().set_pre(currentNode.get_pre())
self.__len -= 1
break
else:
currentNode = currentNode.get_next()
#更改头元素--若空则抛出异常,否则更改第一个结点数据
def update_first(self,data):
if self.__len == 0:
raise NullLinkedError()
else:
self.__first.set_data(data)
#更改尾元素,若空则抛出异常,否则更改最后一个节点数据
def update_last(self,data):
if self.__len == 0:
raise NullLinkedError()
else:
self.__last.set_data(data)
def update(self,data0,data):
if self.__len == 0:
raise NullLinkedError
else:
currentNode = self.__first
flag = False
while currentNode != None:
if currentNode.get_data() == data0:
currentNode.set_data(data)
flag = True
break
else:
currentNode = currentNode.get_next()
if flag:
print("修改成功啦啦啦")
else:
print("修改失败啦啦啦")
#查看
def show_info(self):
if self.__len == 0:
print("这是一个空链表")
else:
currentNode = self.__first
while currentNode != None:
print(currentNode.get_data())
currentNode = currentNode.get_next()
def length(self):
return self.__len
d = double_linked()
d.insert_first("林徽因")
d.insert_first("蜘蛛侠")
d.insert_last("猴子")
d.insert_last("gly")
#d.delete_first()
#d.delete_last()
#d.update_first("666")
#d.update_last("猪猪侠")
#print(d.length())
d = double_linked()
d.insert_first("林徽因")
d.insert("林徽因","gly")
d.show_info()
d.delete("林徽因")
d.update("gly","咦")
d.show_info()
print(d.length())
'''
#双向链表----增删改查
最新推荐文章于 2022-03-08 15:38:18 发布