没有指针,Python如何实现链表、二叉树这些数据结构?

前言

兜兜绕绕两三天终于到了重要的地方了,当初想到要学数据结构的时候,以及后面了解到数据结构的语言无关性之后,心里不免还是有个疑问:Python也没有指针啊,怎么样像C语言那样通过指针来实现更高级的数据结构呢?众所周知,C语言实现的链表是由一个一个的结点构成,每个结点分为数据域和指针域,指针域中存储了其后继结点的地址,通过地址来访问下一个结点,然后一步一步的串联起来形成了一个单链表。但是Python没有指针啊,难不成有什么更高级的玩意儿来替代指针这个东西?带着这个大大的问号,我开始了链表的学习。

结点的实现

class Node(object):
    """节点"""
    def __init__(self, elem):
        self.elem = elem
        self.next = None

当老师直接拿出这个的时候
我:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
我简直就是黑人问号,居然可以这么玩!不过仔细想想,好像也有点道理,毕竟Python中万物皆对象嘛,一个结点用类的方式来实现也比较符合Python的语法结构,一如既往的那么简洁优雅,哈哈!其实这个类的方法实现链表类似于C语言中的结构体实现链表不过其对于指向下一个结点的方式略有不同。
elem是数据域,next类似于C语言中的指针域,是下一个结点的标识。所以一个单一结点类对象的next指向None。
在这里我要特别强调一下Python中的“=”的特殊含义以及作用。Python中的“=”是一种指向性的表示,self.next = None即节点的next指向为None,相当于我在None上贴了一个标签,标签的名字是next,这个next指向None。
在这里插入图片描述

单链表的操作

链表有以下操作方法,包括最基本的增删改查和其他的一些方法。

  • is_empty() 链表是否为空
  • travel() 遍历整个链表
  • length() 链表长度
  • add(item) 链表头部添加元素
  • append(item) 链表尾部添加元素
  • insert(pos, item) 指定位置添加元素
  • search(item) 查找节点是否存在
  • remove(item) 删除节点

单链表操作的实现

一个单链表首先要有一个头结点:

class SingleLinkList(object):
    """单链表"""
    def __init__(self, node=None):
        self.__head = node
is_empty()判断链表是否为空

这个函数主要返回就是True和False,如果头结点是空,那么这个链表就是一个空链表.

  • 94
    点赞
  • 415
    收藏
    觉得还不错? 一键收藏
  • 41
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值