最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python怎么实现链表

    正文概述    2020-05-24   249

    python怎么实现链表

    一、概念梳理

    链表是计算机科学里面应用应用最广泛的数据结构之一。它是最简单的数据结构之一,同时也是比较高阶的数据结构(例如棧、环形缓冲和队列)

    简单的说,一个列表就是单数据通过索引集合在一起。在C里面这叫做指针。比方说,一个数据元素可以由地址元素,地理元素、路由信息活着交易细节等等组成。但是链表里面的元素类型都是一样的,是一种特殊的列表。

    一个单独的列表元素叫做一个节点。这些节点不像数组一样都按顺序存储在内存当中,相反,你可以通过一个节点指向另外一个节点的指针在内存不同的地方找到这些元素。列表最后一项习惯用NIL表示,相当于python里面的None。

    这里介绍两种不同的列表——单链表和双链表。双链表中的某个节点只会指向列表中的下一个元素,但是在双链表里面,当前节点同时也会指向前一个节点。所以双链表会占用更多的内存,因为它需要额外的变量去存储索引。

    python怎么实现链表

    单链表可以从头到尾顺序查询,但是反过来就不是那么容易了。然而,双链表不管你是从哪个节点开始,从任意方向查询都是一样的。在单链表中增加和删除节点只需要两步,但是在双链表里就需要四步了。

    但是在python里面没有提供像双链表一样的数据结构,所以我们可以自己创建一个这样的数据结构。

    二、如果使用python创建链表

    (1)将节点定义成一个数据结构

    首先我们将节点类定义成ListNode,该类在初始化实例对象时,定义了两个实例变量,其中data用来存储节点的值,next用来存储下一个节点的索引,下面详细介绍一下一个节点要定义的方法和属性

    __init__():初始化节点
    self.data:存储节点的值
    self.next:存储指向下一个节点的索引
    has_value():将当前节点值和其他的值比较

    上面的方法和属性涵盖了一个节点应有的基本属性和行为

    Listing1:The ListNode class

    python怎么实现链表

    上面创建了最简单的节点类,下面初始化ListNode的对象

    Listing2:初始化节点

    python怎么实现链表

    上面创建了三个独立的节点

    (2)创建一个单链表类

    现在我们定义一个名为SingleLinkedList的类去管理我们的节点,它包含了下面这些方法:

    __init__():初始化对象
    list_length():返回节点数量
    output_list():输出节点值
    add_list_item():在列表末尾增加一个新的节点
    unordered_search():根据一个特殊值去查询列表
    remove_list_item_by_id():根据节点id移除节点

    下面一一讲解这些方法

    __init__()定义了head和tail,都初始化为None

    Listing3:The SingleLinkedList class(part one)

    python怎么实现链表

    (3)添加节点

    通过add_list_item()添加列表元素。先检测是不是ListNode的实例,如果不是,就新建一个节点。如果列表还是空的话,就把该节点当作头节点,如果不是空,就将当前节点指向下一个元素(也就是刚新添加的节点)。把新节点添加到列表当中

    Listing4:The SinglelinkedList class(part two)

    python怎么实现链表

    list_length()方法计算节点数量,返回列表的长度。在一个循环当中循环列表,self.next依次指向下一个节点

    Listing5:The SingleLinkedList class(part three)

    python怎么实现链表

    output_list()用来输出新的节点值

    Listing6:The SingleLinkedList class(part four)

    python怎么实现链表

    下面我们初始化SingleLinkedList的实例track,然后创建4个节点。

    python怎么实现链表

    (4)查询列表

    查询整个列表使用unordered_search()。它需要使用一个额外的参数帮助查询。列表的头是切入点。

    python怎么实现链表

    (5)从列表中移除一个元素

    从列表中移除一个节点 时,指向该节点索引需要被移动到,被移除节点的下一个节点。被移除的节点会由python的垃圾回收机制清除

    Listing10:Removing a node by node number

    python怎么实现链表

    (6)创建一个双链表

    创建双链表其实就是在ListNode的基础上,在创建一个previous的属性

    Listing11:Extended list node class

    python怎么实现链表

    然后我们就可以依据上面的定义新建一个双链表类

    python怎么实现链表

    添加新的节点跟单链表有所不同

    python怎么实现链表

    移除双链表中的节点

    python怎么实现链表

    python实际运用

    python怎么实现链表

    输出结果:

    python怎么实现链表

    (7)使用队列实现双向列表

    python怎么实现链表

    python学习网,免费的在线学习python平台,欢迎关注!


    起源地下载网 » python怎么实现链表

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元