python实现循环链表,python单链表实现具体例子
本文主要详细介绍python单向循环链表的例子。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
用python实现单向循环链表,供大家参考。具体情况如下
单向循环链表
将所有节点链接在一起,每个节点分为数据存储区和链接区,数据区存储数据,链接区链接下一个节点。
项目:存储数据的位置。
下一个:链接下一个节点。
注意:单向循环链表是第一个链接,即末尾的节点要和头的节点链接。
单向链表操作
1.链表是空的吗?
2.链表的长度
3.遍历链表
4.向链表的头部添加元素。
5.在链表的末尾添加元素。
6.在链表中的指定位置添加一个元素。
7.删除链表中的节点。
8.找出该节点是否存在。
代码实现
# Functions函数声明
类节点():
实例化节点类
def __init__(self,item):
self.item=项目
self.next=无
类链表():
存储节点类
def __init__(self):
self.head=无
# 1.链表是空的吗?
定义为_空(自身):
返回self.head==None
# 2.链表的长度
定义长度(自身):
返回链表的长度。
遍历所有节点,并用计数器计数。
1.链接列表为空。
#实例化节点
cur=self.head
if self.is_empty():
返回0
else:
#计数
计数=1
#遍历链表
下一个!=self.head:
计数=1
下一个
返回计数
# 3.遍历链表
定义差旅(自助):
遍历链表获取所有数据。
实例光标、遍历数据、输出数据
1.空链表
2.只有头节点。
3.只有尾节点。
#实例化光标
cur=self.head
if self.is_empty():
不返回
else:
#导线数据
下一个!=self.head:
print(cur.item,end= )
下一个
#最后一个节点应该单独输出
打印(当前项目)
# 4.向链表的头部添加一个元素
定义添加(自身,项目):
向链接列表头添加数据。
分析
链接列表为空。
Self.head直接指向node,然后node指向自己。
链接列表不为空。
node.next=self.head
#实例化光标
cur=self.head
#实例化节点
节点=节点(项目)
#确定它是否为空。
if self.is_empty():
self.head=node
node.next=node
else:
#非空的情况
#将最后一个节点指向节点
下一个!=self.head:
下一个
node.next = self.head
self.head = node
cur.next = node
# 5. 链表尾部添加元素
def append(self, item):
"""
往尾部添加数据
分析
实例化节点,再实例化游标先指向最后一个节点
调换指向
1、空链表情况
2、只有一个链表情况
"""
# 实例化节点
node = Node(item)
# 实例化游标
cur = self.head
# 判断是否为空
if self.is_empty():
self.add(item)
else:
# 不为空的情况,移动游标指向最后一个节点
while cur.next != self.head:
cur = cur.next
node.next = self.head
cur.next = node
pass
# 6. 链表指定位置添加元素
def insert(self, index, item):
"""
指定位置添加数据
实例化节点, 实例化游标指向索引的数据,更改指向
位置大小
链表是否为空
"""
# 实例化节点
node = Node(item)
# 实例化游标
cur = self.head
if index <=0:
self.add(item)
elif index > (self.length()-1):
self.append(item)
else:
# 判断链表是否为空
if self.is_empty():
self.add(item)
else:
# 移动游标,指向指定的索引位置
count = 0
while count < index-1:
count+=1
cur = cur.next
node.next = cur.next
cur.next = node
pass
# 7. 链表删除节点
def remove(self, item):
"""
删除指定的节点
实例化游标,遍历链表插件这个节点是否存在,存在则更改指向
不存在,则不修改
空链表情况
头节点情况
尾结点情况
"""
# 实例化游标
cur = self.head
if self.is_empty():
return None
else:
# 不为空,遍历链表,对比数据是否相等
# 如果头节点是要删除的数据
if cur.item == item:
self.head=cur.next
# 找出最后的节点,将最后的节点指向,删除后面的那个节点
while cur.next != self.head:
cur = cur.next
cur.next = cur.next
else:
pro = None
while cur.next != self.head:
if cur.item == item:
if cur.item == item:
pro.next = cur.next
return True
else:
pro = cur
cur = cur.next
if cur.item == item:
pro.next = self.head
pass
# 8. 查找节点是否存在
def search(self, item):
"""
查找该节点是否存在
实例化游标,遍历所有的节点
查看当前节点的数据是否和item 相等
空链表
头节点
尾结点
"""
# 实例化游标
cur = self.head
# 判断空链表
if self.is_empty():
return None
else:
# 不为空遍历整个链表
if cur.item == item:
return True
else:
while cur.next != self.head:
if cur.item == item:
return True
else:
cur = cur.next
if cur.item == item:
return True
pass
测试运行
# 程序的入口if __name__ == "__main__":
a = Linklist()
a.add(400)
a.add(300)
a.add(200)
a.add(100)
# a.append(10)
a.insert(4,6)
# a.remove(6)
print(a.length()) # 5
a.travel() # 100 200 300 400 6
print(a.search(100)) # True
pass
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。