单向循环链表的基本操作

‘’’
说明:链表的本质是列表
链表的简单操作:
基础方法:
is_empty()—判断是否为空
length()—测量长度
travel()—遍历链表
增:
add()—头部插入
1append()—尾部插入
insert()—中间某个位置插入
删:
remove()—删除
查:
search()—查找元素
‘’’
‘’’
实现步骤:1、创建结点类----用类方法
2、创建链表类----用对象方法
‘’’

class Node(object):
def init(self,elem):
self.elem = elem
self.next = None

class SingleLinklist(object):
def init(self,node=None):
‘’‘创建self.__head私有属性,其作为特殊的引导结构,含有指针功能。
让其指向一个虚无空结点node,形成链表结构,默认此链表为空。
同时链表上的结点具有结点的elem和next属性’’’
self.__head = node
if node:
node.next = node

def is_empty(self):
    return self.__head == None
def length(self):
   '''创建一个游标cur用来移动遍历结点。
      self__head指向第一个结点,此时的cur也指向第一个结点'''
   if self.is_empty():
       return 0
   else:
        cur = self.__head
        '''用count来计数结点个数'''
        count = 1
        while cur.next != self.__head:
            count +=1
            cur = cur.next
   return count

def travel(self):
    if self.is_empty():
        return None
    cur = self.__head
    while cur.next != self.__head:
       print(cur.elem,end='')
       cur = cur.next
    #尾节点需要打印出来
    print(cur.elem)


def add(self,item):
   '''头插法:需要考虑self__head的指针指向、首结点指针指向、尾节点指针指向
             分为:空结点、只有一个结点、多结点
   '''
   node = Node(item)
   cur = self.__head
   while self.is_empty():
       self.__head = node
       node.next = node
   else:
        while cur.next != self.__head:
            cur = cur.next
            node.next = self.__head
        self.__head = node


def append(self,item):
    '''空链表'''
    node = Node(item)
    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):
    node = Node(item)
    '''pos是从0开始索引'''
    pre = self.__head
    count = 0
    if pos <= 0:
        self.add(item)
    while  pos > (self.length()-1):
        self.append(item)
    while count < (pos -1):
        count +=1
        pre = pre.next
    node.next = pre.next
    pre.next = node


def remove(self,item):
    '''要删除结点分为首结点、中间结点、尾节点。同时判断链上一共有多少个结点'''
    if self.is_empty():
        return False
    node = Node(item)
    cur = self.__head
    pre = None
    while cur.next != self.__head:
        if cur.elem == item:
            '''先判断此结点是否为首结点'''
            if cur == self.__head:
                '''删除头结点情况下'''
                '''判断尾节点是第几个结点'''
                rear = self.__head
                while rear.next != self.__head:
                    rear =rear.next
                self.__head =cur.next
                rear.next = self.__head
            else:
                '''中间结点'''
                pre.next = cur.next
            return
        else:
            pre = cur
            cur =cur.next
    '''尾节点'''
    if cur.elem == item:
        if self.__head == cur:
            self.__head = None
        else:
            pre.next = cur.next


def search(self,item):
    node = Node(item)
    cur = self.__head
    if self.is_empty():
        return False
    while cur.next != self.__head:
        if cur.elem == item:
            return  True
        else:
            cur = cur.next
    if cur.elem == item:
        return True
    return False

if name == ‘main’:
ll = SingleLinklist()
print(ll.is_empty())
print(ll.length在这里插入代码片

猜你喜欢

转载自blog.csdn.net/xiaoyaosheng19/article/details/82851782
今日推荐