python模拟实现链表_python实现链表数据结构

声明:

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

代码至此结束

此栏目预测共享自学之乐,共勉求知之友,共塑网站和谐好学的形象。

欢迎大家在评论区发表合理的意见和指正。

如果觉得该栏目对您有帮助,望不吝点赞收藏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值