Python实现双链表和循环链表

python实现线性表

双链表

单链表结点中只有一个指向其后继的指针,这使得单链表只能从头结点依次顺序的向后遍历,访问后继结点时间复杂度为O(1),访问前驱结点的时间复杂度为O(n).

在这里插入图片描述
双链表仅仅是在单链表的结点中增加一个指向其前驱的prior指针,因此,在双链表中执行按值查找和按位查找的操作和单链表相同。但双链表在插入和删除操作的实现上,和单链表有着较大的不同。这是因为“链”变化时也需要对prior指针做出修改,其关键在于保证在修改的过程中不断链。此外,双链表可以很方便地找到其前驱结点,因此,插入,删除结点算法的时间复杂度为O(1).
双链表的结点定义:

class linknode():#每个结点有两个数据成员,结点元素和指向下一个结点的指针
    def __init__(self,item):
        self.item=item
        self.next=None
		self.prior=None   

插入节点:
在这里插入图片描述在双链表中p指向的结点之后插入s指向的节点,执行代码为:

s->next=p->next
s->prior=p
p->next->prior=s
p-next=s

删除节点
在这里插入图片描述
删除双链表中q指向的结点,执行代码:

p->next=q->next
q->next->prior=p

循环链表

循环单链表
循环单链表和单链表的区别在于,表中最后一个结点的指针不是NULL,而改为指向头结点,从而整个链表形成一个环。
循环单链表
表尾指针的next指向头结点,因此表中没有指针域为NULL的结点,因此循环单链表的判空条件为:

头结点->next==L?True:False

循环双链表
和循环单链表的不同在于:头结点的prior指针还要指向尾结点,其余的结点也都有两个指针域,prior指向它的前驱结点。
在这里插入图片描述

当循环双链表为空表时,其头结点的prior和next都等于L

猜你喜欢

转载自blog.csdn.net/liulanba/article/details/113781488
今日推荐