声明:
0.数据结构本人自行设计,稳定性未得到验证
1.python标准库由于某些原因未实现链表且无指针概念
2.本代码将节点封装为类模拟数据域和指针域
3.转载附作者Id及原作品链接
原代码如下:
class Node():
#节点类
def __init__(self,data=None,ne_xt=None):
self.data=data
self.next=ne_xt
def get_data(self):
return self.data
def get_next(self):
return self.next
def set_data(self,new_data):
self.data=new_data
def set_next(self,new_next):
self.next=new_next
class Linklist():
#链表类
def __init__(self):
self.head=Node()
#头结点
self.size=0
#表长
def is_empty(self):
return not self.size
def add(self,data):
#前端添加
self.size+=1
new_node=Node(data,self.head.get_next())
self.head.set_next(new_node)
def append(self,data):
#尾部添加
self.size+=1
if self.is_empty():
self.add(data)
else:
new_node=Node(data,None)
current=self.head
#遍历位置
while current.get_next():
current=current.get_next()
current.set_next(new_node)
def search(self,data):
current=self.head
result=False
while current:
if current.get_data()==data:
result=True
break
else:
current=current.get_next()
return result
def position(self,data):
#返回位置
current=self.head.get_next()
position=0
result=False
while current:
position+=1
if current.get_data()==data:
result=True
break
else:
current=current.get_next()
if result:
return position
else:
raise ValueError('%s NOT INSIDE'%data)
#抛出错误
def remove(self,data):
#删除节点
current=self.head
pre_node=None
while current:
if current.get_data()==data:
pre_node.set_next(current.get_next())
self.size-=1
break
else:
pre_node=current
current=current.get_next()
def insert(self,position,data):
#插入节点
if position<2:
self.add(data)
elif position>self.size:
self.append(data)
else:
temporary=Node(data,None)
count=0
pre_node=None
current=self.head
while count
count+=1
pre_node=current
current=current.get_next()
pre_node.set_next(temporary)
temporary.set_next(current)
def fetch(self,position):
#取值
current=self.head
count=0
if position>self.size:
raise ValueError
elif position<0:
raise ValueError
else:
while count!=position:
count+=1
current=current.get_next()
return current.get_next().get_data()
if __name__ == "__main__":
ll=Linklist()
#实例化
print(ll.is_empty())
#True
for i in range(10):
ll.add(i)
ll.append(i)
ll.insert(1,"insert")
for i in range(ll.size):
print(ll.fetch(i),end=" ")
#9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
print("")
ll.remove("insert")
print(ll.size)
#20
for i in range(10):
ll.remove(i)
for i in range(ll.size):
print(ll.fetch(i),end=" ")
#0 1 2 3 4 5 6 7 8 9
print("")
print(ll.size)
#10
print(ll.search(0))
#True
print(ll.position(0))
#1
print(ll.position(9))
#10
代码至此结束
此栏目预测共享自学之乐,共勉求知之友,共塑网站和谐好学的形象。
欢迎大家在评论区发表合理的意见和指正。
如果觉得该栏目对您有帮助,望不吝点赞收藏。