python数据结构循环_Python数据结构与算法:单向循环表,python,列表

##################### P4.9-P4.12 循环链表 ###########################

#coding:utf-8

class Node(object):

def __init__(self,elem):

self.elem = elem

self.next = None

class SinglecycleList(object):

"""SinglelinkList"""

def __init__(self,node = None):

#默认参数

self.__head = node

if node:

node.next= node

def is_empty(self):

return self.__head == None

def travel(self):

"""遍历链表"""

if self.is_empty():

return True

cur = self.__head

while cur.next != self.__head:

# print(cur.elem, end=" ")

cur= cur.next

print(cur.elem)

# print("")

def length(self):

"""length of list 遍历 借助 Cursor 指针或者游标计数"""

if self.is_empty():

return 0

cur = self.__head#cur游标 遍历节点 不断移动

count = 1

while cur!= self.__head:# cur.next = None

count+=1

cur = cur.next

return count

def __add__(self, item):

"""nedd to add node"""

node = Node(item)

cur = self.__head

if self.is_empty():

self.__head = node

node.next = node

else:

cur = self.__head

while cur.next!=self.__head:

cur =cur.next

node.next = self.__head

cur.next = node

def append(self,item):

node = Node(item) #node 实例化

if self.is_empty():

self._head = node

node.next = node

else:

cur = self.__head

while cur.next != self.__head:

cur = cur.next

node.next = self.__head

cur.next = node

def insert(self,pos,item):

""":param pos 从0 开始 """

pre = self.__head

count = 0

if pos<0:

self.__add__(item)

elif pos>(self.length()-1):

self.append(item)

else:

while (count

count+=1

pre = pre.next

node =Node(item)

node.next = pre.next

pre.next = node

def remove(self,item):

if self.is_empty():

return

cur = self.__head

pre = None

#遍历终止条件

while cur!= self.__head:

if cur.elem == item:#循环中找到要删除的节点

if cur == self.__head:#判断是否是头节点

rear = self.__head #找到尾节点

while rear.next != self.__head:

rear = rear.next

rear.next=self.__head

self.__head = cur.next

else:#中间删除

pre.next = cur.next

return

else:

pre = cur

cur = cur.next

#退出循环,cur指向尾节点

if cur.elem ==item:

# 只有一个节点

if cur == self.__head:

self.__head = None

else:

pre.next = cur.next

#pre.next = self.__head

def search(self,item):

if self.is_empty():

return False

cur = self.__head

while cur!= self.__head:

if cur.elem == item:

return True

else:

cur = cur.next

if cur.elem ==item:

return True

return False

# single_obe = SinglelinkList()

if __name__ =="__main__":

ll = SinglecycleList()

print(ll.is_empty())

print(ll.length())

ll.append(1)

print(ll.is_empty())

print(ll.length())

ll.append(2)

ll.__add__(8)

ll.append(3)

ll.append(4)

ll.append(5)

ll.append(6)

ll.insert(-1, 9)

ll.insert(3, 100)

ll.insert(8, 1234)

ll.travel()

### 9 8 1 3 119 1 3 1234

ll.remove(1234)

ll.travel()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值