文章目录
前言
兜兜绕绕两三天终于到了重要的地方了,当初想到要学数据结构的时候,以及后面了解到数据结构的语言无关性之后,心里不免还是有个疑问: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,如果头结点是空,那么这个链表就是一个空链表.