双向链表
单向链表相对数组来说已经有很多优点了,但是,它还有一个最大的弊端,每次查找元素时都要一路遍历,没办法倒回来,这种特性在进行数据操作时,会大大浪费时间,鉴于此,出现了双向链表的概念。
双向链表(双链表)是链表的一种。和单链表一样,双链表也是由节点组成,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
循环链表是一种链式存储结构,它的最后一个结点指向头结点,形成一个环。因此,从循环链表中的任何一个结点出发都能找到任何其他结点。循环链表的操作和单链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同。
双循环链表,只需要最后一个元素的next指向head->next,head->next的prior指向最后一个节点即可。
顾名思义,双向链表就是具备两个方向的指向,无非就是每个结点成了两个指针。
python实现实现双向链表
# coding:utf-8
#由于双向链表有一些操作和单向链表一样,所以可以将单链表的实现封装成模块,导入单链表类模块,方便继承
# from singlelink import SingleLinkList
# 定义双向链表的结点类,双向链表结点包含三个部分,数据,向前的指针和向后的指针
class Node(object):
'''定义结点'''
def __init__(self, item):
self.elem = item
self.next = None
self.prev = None
class Doublelinklist():
'''双向链表,有些方法和单向链表一样,可以继承单向链表的类(可以尝试)'''
#链表初始化可以继承单向链表
#链表判空可以继承单向链表
#求链表长度可以继承单向链表
#遍历可以继承单向链表
#这里我们不用继承
def __init__(self,node=None):
'''链表初始化'''
self.__head = node
def is_empty(self