python单向循环链表_Python 实现的单向循环链表功能示例

Python 实现的单向循环链表功能示例

Python 是一种面向对象解释型计算机程序设计语言, 由 Guido van Rossum 于 1989 年底发明, 第一个公开发行版发行于 1991 年 Python 语法简洁而清晰, 具有丰富和强大的类库它常被昵称为胶水语言, 它能够把用其他语言制作的各种模块 (尤其是 C/C++) 很轻松地联结在一起

这篇文章主要介绍了 Python 实现的单向循环链表功能, 简单描述了单向循环链表的概念原理并结合实例形式分析了 Python 定义与使用单向循环链表的相关操作技巧, 需要的朋友可以参考下

本文实例讲述了 Python 实现的单向循环链表功能分享给大家供大家参考, 具体如下:

概述:

单向循环链表是指在单链表的基础上, 表的最后一个元素指向链表头结点, 不再是为空

ab7653affab982b574eb7acc55df2e04.gif

由图可知, 单向循环链表的判断条件不再是表为空了, 而变成了是否到表头

操作

is_empty() 判断链表是否为空

length() 返回链表的长度

travel() 遍历

add(item) 在头部添加一个节点

append(item) 在尾部添加一个节点

insert(pos, item) 在指定位置 pos 添加节点

remove(item) 删除一个节点

search(item) 查找节点是否存在

具体代码:classNode(object):

"""节点"""

def__init__(self,item):

self.item=item

self.next=None

classSinCycLinkedlist(object):

"""单向循环链表"""

def__init__(self):

self._head=None

defis_empty(self):

"""判断链表是否为空"""

returnself._head==None

deflength(self):

"""返回链表的长度"""

# 如果链表为空, 返回长度 0

ifself.is_empty():

return0

count=1

cur=self._head

whilecur.next!=self._head:

count+=1

cur=cur.next

returncount

deftravel(self):

"""遍历链表"""

ifself.is_empty():

return

cur=self._head

printcur.item,

whilecur.next!=self._head:

cur=cur.next

printcur.item,

print""defadd(self,item):""" 头部添加节点 """

node=Node(item)

ifself.is_empty():

self._head=node

node.next=self._head

else:

#添加的节点指向_head

node.next=self._head

# 移到链表尾部, 将尾部节点的 next 指向 node

cur=self._head

whilecur.next!=self._head:

cur=cur.next

cur.next=node

#_head 指向添加 node 的

self._head=node

defappend(self,item):

"""尾部添加节点"""

node=Node(item)

ifself.is_empty():

self._head=node

node.next=self._head

else:

# 移到链表尾部

cur=self._head

whilecur.next!=self._head:

cur=cur.next

# 将尾节点指向 node

cur.next=node

# 将 node 指向头节点_head

node.next=self._head

definsert(self,pos,item):

"""在指定位置添加节点"""

ifpos<=0:

self.add(item)

elifpos>(self.length()-1):

self.append(item)

else:

node=Node(item)

cur=self._head

count=0

# 移动到指定位置的前一个位置

whilecount

count+=1

cur=cur.next

node.next=cur.next

cur.next=node

defremove(self,item):

"""删除一个节点"""

# 若链表为空, 则直接返回

ifself.is_empty():

return

# 将 cur 指向头节点

cur=self._head

pre=None

# 若头节点的元素就是要查找的元素 item

ifcur.item==item:

# 如果链表不止一个节点

ifcur.next!=self._head:

# 先找到尾节点, 将尾节点的 next 指向第二个节点

whilecur.next!=self._head:

cur=cur.next

# cur 指向了尾节点

cur.next=self._head.next

self._head=self._head.next

else:

# 链表只有一个节点

self._head=None

else:

pre=self._head

# 第一个节点不是要删除的

whilecur.next!=self._head:

# 找到了要删除的元素

ifcur.item==item:

# 删除

pre.next=cur.next

return

else:

pre=cur

cur=cur.next

# cur 指向尾节点

ifcur.item==item:

# 尾部删除

pre.next=cur.next

defsearch(self,item):

"""查找节点是否存在"""

ifself.is_empty():

returnFalse

cur=self._head

ifcur.item==item:

returnTrue

whilecur.next!=self._head:

cur=cur.next

ifcur.item==item:

returnTrue

returnFalse

if__name__=="__main__":

ll=SinCycLinkedlist()

ll.add(1)

ll.add(2)

ll.append(3)

ll.insert(2,4)

ll.insert(4,5)

ll.insert(0,6)

print"length:",ll.length()

ll.travel()

printll.search(3)

printll.search(7)

ll.remove(1)

print"length:",ll.length()

ll.travel()

运行结果:

ab7653affab982b574eb7acc55df2e04.gif

来源: http://www.phperz.com/article/18/0216/360907.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值