美文网首页
数据结构学习--单循环链表(python)

数据结构学习--单循环链表(python)

作者: 雷子_ | 来源:发表于2019-12-12 09:15 被阅读0次

概念

将单链表的终端节点的指针由原来的空指针改为指向头节点, 就是整个单链表形成一个环, 这种首尾相接的单链表称为单循环链表.


实现

class Node:
    """
    节点
    """

    def __init__(self, value):
        self.data = value
        self.next = None


class CircularLinkedList:
    def __init__(self):
        self.rear = None    # 尾节点

    def is_empty(self):
        return self.rear is None

    # def append(self, elem):
    #     """
    #     尾插法
    #     """
    #     temp = Node(elem)
    #     if self.rear is None:
    #         temp.next = temp
    #         self.rear = temp
    #     else:
    #         temp.next = self.rear.next
    #         self.rear.next = temp
    #         self.rear = temp

    def prepend(self, elem):
        """
        头插法
        """
        temp = Node(elem)
        if self.rear is None:
            temp.next = temp
            self.rear = temp
        else:
            temp.next = self.rear.next
            self.rear.next = temp

    def append(self, elem):
        """
        尾插法
            先将节点插入头部,然后尾指针后移
        """
        self.prepend(elem)
        self.rear = self.rear.next

    def print_all(self):
        if self.is_empty():
            return
        p = self.rear.next      # 取得头部节点
        print('Head', end='')
        while True:
            print('-->', p.data, end='')
            if p is self.rear:      # 到达尾部停止
                break
            p = p.next
        print('-->Finish')

    def pop(self, index=0):
        """
        弹出指定索引的节点, 默认头部节点
        """
        if self.rear is None:
            raise IndexError('pop from empty circular linked list.')
        p = self.rear
        for _ in range(index):
            p = p.next
        target = p.next
        if target is self.rear:
            self.rear = None
        p.next = target.next
        target.next = None
        return target.data

    def __iter__(self):
        if self.rear is None:
            return
        p = self.rear.next
        while p is not self.rear:
            yield p.data
            p = p.next
        yield p.data

相关文章

  • 数据结构学习--单循环链表(python)

    概念 将单链表的终端节点的指针由原来的空指针改为指向头节点, 就是整个单链表形成一个环, 这种首尾相接的单链表称为...

  • 数据结构与算法--循环链表

    数据结构与算法--循环链表 单循环链表的实现 单链表的实现中,最后一个结点始终指向null,表示达到表尾部。位于l...

  • 线性表存储结构

    数组实现 结构体实现 带头结点的单循环链表 带头结点的双循环链表 带头结点 带头结点的单循环链表和双循环链表 不管...

  • 数据结构与算法

    笨办法学 Python · 续 练习 13:单链表 笨办法学 Python · 续 练习 13:单链表数据结构与常...

  • python实现循环单链表

    参考: 用Python实现的数据结构与算法:链表

  • python中的树数据结构

    线性数据中的典型顺序表和链表已经讲完: 《顺序表数据结构在python中的应用》 《python实现单向链表数据结...

  • 单循环链表

    单循环链表:将单链表中终端结点的next域由空指针改为指向头结点,就使得整个单链表形成一个环,这种头尾相接的单链表...

  • Python实现链表

    用Python玩转数据结构 链表 节点类 根据在前学过的数据结构,那么必须有节点,Python里面没有指针的说法,...

  • # 数据结构之单循环链表(三)

    一、循环链表的定义循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一...

  • 2018-07-31------数据结构

    1、单链表 传送1 传送门2 2、双链表 传送门 3、循环链表 单循环链表 双向循环链表 4、静态链表 传送门 5...

网友评论

      本文标题:数据结构学习--单循环链表(python)

      本文链接:https://www.haomeiwen.com/subject/ujyzgctx.html