网络编程
位置:首页>> 网络编程>> Python编程>> python实现数据结构中双向循环链表操作的示例

python实现数据结构中双向循环链表操作的示例

作者:GUET_DM_WLB  发布时间:2023-09-05 00:36:47 

标签:python,双向循环链表

看此博客之前建议先看看B站的视频python数据结构与算法系列课程,该课程中未实现双向循环链表的操作,所以我按照该视频的链表思路实现了双向循环链表的操作,欢迎大家阅读与交流,如有侵权,请联系博主!

下面附上代码:


class Node:
 def __init__(self, elem):
   self.elem = elem
   self.prev = None
   self.next = None

class DoubleCycleLinkList:
 def __init__(self, node=None):
   self.__head = node

def is_empty(self):
   """判空"""
   if self.__head is None:
     return True
   return False

def length(self):
   """链表长度"""
   if self.is_empty():
     return 0
   cur = self.__head
   count = 1
   while cur.next is not self.__head:
     count += 1
     cur = cur.next
   return count

def travel(self):
   """遍历链表"""
   if self.is_empty():
     return
   cur = self.__head
   while cur.next is not self.__head:
     print(cur.elem, end=" ")
     cur = cur.next
   print(cur.elem, end=" ")
   print("")

def add(self, elem):
   """头插法"""
   node = Node(elem)
   if self.is_empty():
     self.__head = node
     node.prev = node
     node.next = node
   else:
     self.__head.prev.next = node
     node.prev = self.__head.prev
     node.next = self.__head
     self.__head.prev = node
     self.__head = node

def append(self, elem):
   """尾插法"""
   node = Node(elem)
   if self.is_empty():
     self.__head = node
     node.prev = node
     node.next = node
   else:
     node.next = self.__head
     node.prev = self.__head.prev
     self.__head.prev.next = node
     self.__head.prev = node

def insert(self, pos, elem):
   """任一位置(pos)插入, 下标从0数起"""
   if pos <= 0:
     self.add(elem)
   elif pos > (self.length() - 1):
     self.append(elem)
   else:
     count = 0
     cur = self.__head
     node = Node(elem)
     while count < (pos - 1):
       count += 1
       cur = cur.next
     node.next = cur.next
     node.prev = cur
     node.next.prev = node
     cur.next = node

def remove(self, elem):
   """删除某一节点,若有多个符合条件的节点,删除第一个即可"""
   if self.is_empty():
     return
   cur = self.__head
   while cur.next is not self.__head:
     if cur.elem == elem:
       if cur is self.__head:
         self.__head = cur.next
         cur.prev.next = cur.next
         cur.next.prev = cur.prev
       else:
         cur.prev.next = cur.next
         cur.next.prev = cur.prev
       break
     cur = cur.next
   if cur.elem == elem:
     cur.prev.next = self.__head
     self.head = cur.prev

def search(self, elem):
   """查找某一个节点"""
   if self.is_empty():
     return False
   cur = self.__head
   while cur.next is not self.__head:
     if cur.elem == elem:
       return True
     cur = cur.next
   # while中处理不到尾节点,所以进行最后尾节点的判断
   if cur.elem == elem:
     return True
   return False

来源:https://blog.csdn.net/qq_35874169/article/details/108967489

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com