python数据结构_线性表_02_单链表

本文详细介绍了Python中单链表的实现,包括链表的基本操作如创建、删除、插入元素,以及扫描、定位、遍历等。讨论了不同操作的时间复杂度,并提供了链表节点的Python实现。
摘要由CSDN通过智能技术生成

3. 链接表

3.1 线性表的基本需要与链接表

实现线性表的基本需要是:

  • 能够找到首元素
  • 从任一元素出发,能找到它之后的下一个元素

把表存储在连续的存储块中,即顺序表,能够满足这两个要求,元素的顺序关联是隐含的。然而,实现线性表还可以基于链式结构,该方式实现的顺序表称为链接表或者链表。实现的基本思想如下:

  • 把表元素存放于独立的存储块里(表的节点)
  • 从表的任一节点能够找到下一节点
  • 在前一节点用链接的方式显式记录与下一节点之间的关联

3.2 单链表

单项链接表(单链表)的节点是一个二元组元素域elem保存着表元素的数据项,链接域next保存着下一个节点的标识。要掌握一个表,只需要用一个变量保存着这个表的首节点的引用(标识或链接),该变量称为表头变量表头指针。为了表示链表的结束,给最后节点的链接域设置一个空链接,如在python中用None。如果一个表头指针是一个空连接,则说明是空表。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uKaOyFBy-1576584599538)(03_3.jpg)]
定义一个表节点类如下:

class LNode:
    def __init__(self, elem, next_ = None): #next_加下划线避免与python内置的next重名
        self.elem = elem
        self.next_ = next_

基本链表操作

  • 创建空链表:表头变量设置为空链接,如None
  • 删除链表:同上,python的存储管理系统会自动回收不用的存储
  • 判断表是否为空:将表头变量的值与空链接比较
  • 判断表是否满:一般链表不会满,除非所有存储空间都用完

加入元素

包括首段插入、尾端插入及定位插入。和顺序表相比,链表插入数据不需逐个移动元素,只需修改单个节点的链接,接入新节点。
表首端插入:插入新元素作为表的第一个元素
step1:创建新节点并存入数据
step2:将原链表首节点存入新节点的next
step3:修改表头变量,指向新节点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kPwGIGmm-1576584599540)(03_4.jpg)]

#示例代码
q = LNode(13)
q.next = head.next
head = q
'\n#示例代码\nq = LNode(13)\nq.next_ = head.next_\nhead = q\n'

一般情况的元素插入:先找到插入点之前的节点,然后修改插入节点和之前节点的next域
step1:创建新节点存入数据
step2:把pre的next域的值存入新节点的next域
step3:修改pre的next域,指向新节点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rbaOORUB-1576584599540)(03_5.jpg)]

# 示例代码段
q = LNode(13)
q.next = pre.next
pre.next = q

删除元素

删除表首元素:删除第一个节点,只需将表头后移一个

#示例代码
head = head.next

一般情况的元素删除:找到所删元素节点的前一个节点pre,修改pre的next域,指向被删节点的下一节点。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UlmkQgYj-1576584599541)(03_6.jpg)]

#示例代码
pre.next = pre.next.next

扫描、定位、遍历

扫描:从表头变量开始,沿着表中链接逐步执行某些操作,称为链表的扫描。
具体方法是:借助辅助变量p(扫描指针)进行遍历,执行操作,直到p到达尾部,即p为None。

#示例代码
p = head
while p is not None and 需要继续的其他条件:
    执行数据所需操作
    p = p.next

按下标定位:链表首节点元素看作下标0,确定第i个元素所在节点的操作称为按

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值