资讯专栏INFORMATION COLUMN

【数据结构】线性表:Python语言描述

wua_wua2012 / 386人阅读

摘要:线性表的和采用了顺序表的实现技术,具有顺序表的所有性质。删除链表应丢弃这个链表里的所有结点。在语言中,就是检查相应变量的值是否为。也就是说,插入新元素的操作是通过修改链接,接入新结点,从而改变表结构的方式实现的。

1.线性表

Python的listtuple采用了顺序表的实现技术,具有顺序表的所有性质。

2.链接表

单向链接表 的结点是一个二元组。

其表元素域elem保存着作为表元素的数据项(或者数据项的关联信息),链接域next里保存着同一个表里的下一个结点的标识。

首先定义一个简单的表结点类:

class LNode:
  def __init__(self,elem,next_=None):
    self.elem = elem
    self.next = next_

这个类里只有一个初始化方法,它给对象的两个域赋值。方法的第二个参数用名字next_,是为了避免与Python标准函数next重名。这也是Python程序中命名的一个惯例。第二个参数还提供了默认值,只是为了使用方便。

2.1 基本链表操作 创建空链表

只需要把相应的表头变量设置为空链接,在Python语言中将其设置为None。

删除链表

应丢弃这个链表里的所有结点。这个操作的实现与具体的语言环境有关。在一些语言(如C语言)里,需要通过明确的操作释放一个个结点所用的存储。在Python中,这个操作很简单,只需简单地将表指针赋值为None,就抛弃了链表原有的所有结点。Python解释器的存储管理系统会自动回收不用的存储。

判断表是否为空

将表头变量的值与空链接比较。在Python语言中,就是检查相应变量的值是否为None。

判断表是否满

一般而言链表不会满,除非程序用光了所有可用的存储空间。

加入元素

在链表里加入新元素时,并不需要移动已有的数据,只需为新元素安排一个新结点,然后根据操作要求,把新结点连在表中的正确元素。也就是说,插入新元素的操作是通过修改链接,接入新结点,从而改变表结构的方式实现的。

表首端加入

创建一个新结点并存入数据

把原数据首结点的链接存入新结点的链接域next,这一操作将原表的一串结点链接在刚创建的新结点之后

修改表头变量,使之指向新结点,这个操作使新结点实际成为表头变量所指的结点,即表的首结点

q = LNode(13)
q.next = head.next
head = q

注意,即使在插入前head指的是空表,上面三步也能正确完成工作。这个插入只是一次安排新存储和几次赋值,操作具有常量时间复杂度。

一般情况的元素插入

要想在单链表里的某位置插入一个新结点,必须先找到该位置之前的那个结点,因为新结点需要插入它的后面,需要修改它的next域

设变量pre已指向要插入元素位置的前一结点,操作也分为三步:

q = LNode(13)
q.next = pre.next
pre.next = q
删除元素

删除表首元素

一般情况的元素删除

扫描、定位和遍历 链表操作的复杂度 求表的操作
def length(head):
    p,n = head,0
    while p is not None:
        n += 1
        p = p.next
    return n
3.3.3 单链表类的实现

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44209.html

相关文章

  • 数据结构线性

    摘要:线性表是最基本的数据结构之一,在实际程序中应用非常广泛,它还经常被用作更复杂的数据结构的实现基础。链表之单链表线性表的定义,它是一些元素的序列,维持着元素之间的一种线性关系。 线性表学习笔记,python语言描述-2019-1-14 线性表简介 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含...

    leoperfect 评论0 收藏0
  • Tensorflow代码解析(二)

    摘要:为了进一步了解的逻辑,图对和进行了展开分析。另外,在命名空间中还隐式声明了控制依赖操作,这在章节控制流中相关说明。简述是高效易用的开源库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。返回其中一块给用户,并将该内存块标识为占用。 3. TF 代码分析初步3.1 TF总体概述为了对TF有整体描述,本章节将选取TF白皮书[1]中的示例展开说明,如图 3 1所示是一个简单线性模型的TF...

    zhigoo 评论0 收藏0
  • 线性结构 数组与链

    摘要:线性结构数组与链表线性结构线性数据结构有两端,有时被称为左右,某些情况被称为前后。将两个线性数据结构区分开的方法是添加和移除项的方式,特别是添加和移除项的位置。相对于数组,链表的好处在于,添加或移除元素的时候不需要移动其他元素。 线性结构 数组与链表 线性结构 线性数据结构有两端,有时被称为左右,某些情况被称为前后。你也可以称为顶部和底部,名字都不重要。将两个线性数据结构区分开的方法...

    xi4oh4o 评论0 收藏0
  • 线性结构 数组与链

    摘要:线性结构数组与链表线性结构线性数据结构有两端,有时被称为左右,某些情况被称为前后。将两个线性数据结构区分开的方法是添加和移除项的方式,特别是添加和移除项的位置。相对于数组,链表的好处在于,添加或移除元素的时候不需要移动其他元素。 线性结构 数组与链表 线性结构 线性数据结构有两端,有时被称为左右,某些情况被称为前后。你也可以称为顶部和底部,名字都不重要。将两个线性数据结构区分开的方法...

    edagarli 评论0 收藏0
  • 新书《全栈数据之门》完整目录

    摘要:全栈数据之门前言自强不息,厚德载物,自由之光,你是我的眼基础,从零开始之门文件操作权限管理软件安装实战经验与,文本处理文本工具的使用家族的使用综合案例数据工程,必备分析文件探索内容探索交差并补其他常用的命令批量操作结语快捷键,之门提高效率光 showImg(https://segmentfault.com/img/bVK0aK?w=350&h=350); 全栈数据之门 前言 自强不息,...

    yibinnn 评论0 收藏0

发表评论

0条评论

wua_wua2012

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<