class Node():
def __init__(self,elem):
self.elem = elem
self.next = None
# 是带有头结点的单向循环链表,还是不带头结点的单向循环链表
class SingleXunHuanLinkList():
# 创建头结点,有默认参数
def __init__(self, head=None):
self.__head = head
if head:
head.next = head
# 判断链表是否为空
def is_empty(self):
return self.__head.next == self.__head
# 返回链表长度
def length(self):
p = self.__head.next
length = 0
while p!=self.__head:
length += 1
p = p.next
return length
# 遍历链表
def travel(self):
if self.is_empty():
print("单向循环链表为空")
return
p = self.__head.next
while p!= self.__head:
print(p.elem,end=" ")
p = p.next
# 头插法创建循环单链表
def add(self,item):
node = Node(item)
if self.is_empty():
self.__head.next = node
node.next = self.__head
else:
p = self.__head
node.next = p.next
p.next = node
# 尾插法创建单向循环链表
def append(self, item):
# 根据传进来的数字创建新节点
node = Node(item)
if self.__head.next==self.__head:
self.__head.next = node
node.next = self.__head
else:
p = self.__head
while p.next!=self.__head:
p = p.next
p.next = node
node.next = self.__head
# 在某一位置插入节点
def insert(self,pos,item):
if pos<0:
print()
print("error")
return
elif pos>=self.length():
self.append(item)
else:
index = 0
node = Node(item)
p = self.__head.next
while p!=None:
index = index + 1
if index==pos:
node.next = p.next
p.next = node
p = p.next
def remove(self,item):
if self.is_empty():
print("单链表已经为空,无法删除")
elif self.length()==1 and item==1:
self.__head.next = self.__head
elif item>self.length():
print("该位置没有节点")
else:
p = self.__head
pos = 0
while p.next!=self.__head:
pos = pos+1
if pos==item:
p.next = p.next.next
p = p.next
# 查找指定位置的节点
def search(self,item):
if item<=0 and item>self.length():
print("该位置越界")
return
else:
p = self.__head.next
pos = 0
while p!=self.__head:
pos +=1
if pos==item:
return p.elem
p = p.next
if __name__=='__main__':
# 创建一个节点
head = Node(0)
xunhuan = SingleXunHuanLinkList(head)
print(xunhuan.is_empty())
print(xunhuan.length())
xunhuan.travel()
xunhuan.append(4)
xunhuan.append(5)
xunhuan.append(6)
xunhuan.travel()
print()
xunhuan.add(1)
xunhuan.add(2)
xunhuan.add(3)
xunhuan.travel()
print()
print(xunhuan.is_empty())
print(xunhuan.length())
xunhuan.insert(9,10)
xunhuan.travel()
print()
print("删除节点")
xunhuan.remove(6)
xunhuan.travel()
print()
print("查询节点")
print(xunhuan.search(4))
python数据结构之单向循环链表
最新推荐文章于 2024-11-23 14:17:19 发布