当前位置:首页 > 经验 >

单链表尾指针示意图(链表的节点图解)

来源:原点资讯(www.yd166.com)时间:2022-11-04 00:10:17作者:YD166手机阅读>>

作者:少年吉

来源:微信公众号: 数据科学CLUB

出处:https://mp.weixin.qq.com/s?__biz=MzUzODg0NDI4Mw==&mid=2247485723&idx=1&sn=75dd6e6cb8ca25f2fb5c3bf83c93a31c

  • 顺序表
  • Python顺序表中基本操作的实现
    • list其他操作
    • list内置操作的时间复杂度
  • 单链表
  • python单链表基本操作的实现
    • 单个节点实现
    • 单链表的实现
  • 顺序表与单链表的对比
顺序表

线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种表示 也称作线性表的顺序存储结构或顺序映像。通常,称这种存储结构的线性表为顺序表(Sequent ial List其特点是, 逻辑上相邻的数据元素,其物理次序也是相邻的。假设线性表的每个元素需占用个存储单元,并以所占的第一个单元的存储地址作为数据元 素的存储起始位置。则线性表中第个数据元素的存储位置和第个数据元素的存 储位置 LOC之间满足下列关系:

一般来说,线性表的第个数据元素的存储位置为:

单链表尾指针示意图,链表的节点图解(1)

a = [1,2,3,4,4,5] id(a[1])-id(a[0])

id(a[2])-id(a[1])

id(a[0]) 32*3 == id(a[3])

True Python顺序表中基本操作的实现

Python的 list 和 tuple采用了顺序表的实现技术,具有顺序表的所有性质

  1. 初始化

顺序表的初始化操作就是构造一个空的顺序表。

alist = []

  1. 取值

取值操作是根据指定的位置序号i,获取顺序表中第i个数据元素的值。由于顺序存储结构具有随机存取的特点,可以直接通过数组下标定位得到,elem[i-1]单元存储第i个数据元素。

  • 时间复杂度为

a[2]

  1. 查找

查找操作是根据指定的元素值e,查找顺序表中第1个与e相等的元素。若查找成功,则返回该元素在表中的位置序号;若查找失败,则返回0。

  • 平均时间复杂度为

a.index(4)

  1. 插入

线性表的插入操作是指在表的第个位置插人一个新的数据元素, 使长度为的线性表

变成长度为的线性表

一般情况下,在第个位置插入一个 元素时,需从最后一个元素即第个元素开始,依次向后移动一个位置,直至第个元素(共个元素 )。

顺序表插入算法的平均时间复杂度为

Python中有多种方法向表中插入某一元素

a

[1, 2, 3, 4, 4, 5]

# 在列表尾部添加一个对象 # 官方:same as s[len(s):len(s)] = [x] a.append(0) a

[1, 2, 3, 4, 4, 5, 0]

# 在列表尾部添加一个序列 # 官方:same as s[len(s):len(s)] = t a.extend([9]) a

[1, 2, 3, 4, 4, 5, 0, 9]

# 在指定位置插入元素 a.insert(2,8) a

[1, 2, 8, 3, 4, 4, 5, 0, 9]

a.pop(2)

  1. 删除

线性表的删除操作是指将表的第个元素删去,将长度为的线性表

变成长度为的线性表

一般情况下, 删除第个元素时需将第个至第个元素(共个元素 ) 依次向前移动一个位置

  • 顺序表删除算法的平均时间复杂度为

# 从a中删除a[i]等于x的第一项 a.remove(4) a

[1, 2, 8, 3, 4, 5, 0, 9]

# 返回i处的元素值,并将其从a中删除 a.pop(-1) a

[1, 2, 8, 3, 4, 5, 0] list其他操作

b = [1,2,3,4,4] len(b)

min(b)

max(b)

b.count(4)

5 in b

False

2 in b

True

# 反转 b.reverse() b

[4, 4, 3, 2, 1]

# 删除某几项 del b[1:3] b

[4, 2, 1]

# 清空 b.clear() b

[] list内置操作的时间复杂度

单链表尾指针示意图,链表的节点图解(2)

单链表

线性表链式存储结构的特点是:用一组任意的存储单元存储线性表的数据元素(这组存储单 元可以是连续的,也可以是不连续的因此,为了表示每个数据元素与其直接后继数据元素之间的逻辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直 接后继的信息(即直接后继的存储位置这两部分信息组成数据元素的存储映像,称为结点( node )。它包括两个域:其中存储数据元素信息的域称为数据域; 存储直接后继存储位置的域称 为指针域。指针域中存储的信息称作指针或链。个结点(的存储映像 ) 链结成一 个链表,即为线性表

单链表尾指针示意图,链表的节点图解(3)

示意图

python单链表基本操作的实现单个节点实现

class LNode(object): def __init__(self,elem,next = None): self.elem = elem self.next = next 单链表的实现

  1. 单链表的初始化

class SingleLinkList(object): def __init__(self): self.__head = None # 头结点的指针域置空

  1. 判断链表是否为空

def is_empty(self): return self.__head == None

  1. 链表长度

def length(self): # p初始时指向头节点 p = self.__head count = 0 # 尾节点指向None,当未到达尾部时 while p != None: count = 1 # 将cur后移一个节点 p = p.next return count

  1. 取值

和顺序表不同,链表中逻辑相邻的结点并没有存储在物理相邻的单元中,这样 ,根据给定的 结点位置序号i'在链表中获取该结点的值不能像顺序表那样随机访问,而只能从链表的首元结 点出发,顺着链域 next 逐个结点向下访问。

  • 单链表取值算法的平均时间复杂度为

def get_elem(self,i): # p为扫描指针 p = self.__head while p != None and 0<i<self.length(): i -= 1 p = p.next return p.elem

  1. 查找

链表中按值查找的过程和顺序表类似,从链表的首元结点出发, 依次将结点值和给定值e进 行比较, 返回查找结果。

  • 其平均时间复杂度也为

def loc_elem(self,elem): p = self.__head while p != None: if p.elem == elem: return True else: p = p.next return False

  1. 插入

假设要在单链表的两个数据元素a和b之间插入一个数据元素x, 已知p为其单链表存储结 构中指向结点a的指针

单链表尾指针示意图,链表的节点图解(4)

首页 12下一页

栏目热文

单链表查找图示(三链表结构图解)

单链表查找图示(三链表结构图解)

电子计算机的本质是对输入(input)的数据进行处理(processing),对处理的结果形成输出(output)。程序...

2022-11-04 00:06:55查看全文 >>

单链表按序号查找(单链表按值查找操作)

单链表按序号查找(单链表按值查找操作)

严蔚敏《数据结构》笔记(1-4章)由于上传限制只能分章节上传,并且图片和公式可能无法上传出现乱码影响阅读。需要完整资料的...

2022-11-04 00:44:17查看全文 >>

单链表的创建图解(单链表的创建步骤)

单链表的创建图解(单链表的创建步骤)

创建单链表除了使用前插法,还可以使用后插法。后插法通过将新结点逐个插入到链表的尾部来创建链表。如下图所示根据上图所示,可...

2022-11-04 00:18:55查看全文 >>

单链表增加节点(单链表删除节点)

单链表增加节点(单链表删除节点)

单链表中增加节点,除了增加结点本身的数据域和指针域,还需要更改前、后结点的指针域。一个简单的实例代码:#include ...

2022-11-04 00:20:14查看全文 >>

十字链表简单理解(十字链表的节点结构)

十字链表简单理解(十字链表的节点结构)

前面之前的数据结构知识,介绍了矩阵的三元组表示法,当然之前只介绍矩阵运算中的转置,至于乘法运算以及加减运算,之前没有介绍...

2022-11-04 00:17:04查看全文 >>

单链表的插入结点图解(链表结点交换图解)

单链表的插入结点图解(链表结点交换图解)

单链表的删除和插入操作是线性表中比较重要的一部分,而这些操作又是线性表中的难点,同时也是考试的重点。对于初学者来说,在看...

2022-11-03 23:58:47查看全文 >>

单链表查找最大值(单链表按序查找思路)

单链表查找最大值(单链表按序查找思路)

一、序本文继续給大家带来一道和单链表相关的算法题。之前聊到,如何对单链表是否存在环进行检测,今天再来聊聊这个问题的进阶的...

2022-11-03 23:58:26查看全文 >>

单链表怎么加结点(单循环链表有头节点吗)

单链表怎么加结点(单循环链表有头节点吗)

链表是由节点组成的,节点中包含:数据域和指针域头指针(★):头指针的类型是struct Node *类型,指向链表的第一...

2022-11-04 00:36:18查看全文 >>

单链表查找原理(有序单链表查找方法)

单链表查找原理(有序单链表查找方法)

链表是线性表的链式存储结构,与数组不同的是,它是用一组任意的存储单元来存储线性表中的数据,存储单元不一定是连续的;链表的...

2022-11-04 00:11:15查看全文 >>

单链表算法详解(单链表的创建图解)

单链表算法详解(单链表的创建图解)

单链表结点定义以及操作函数声明我们知道在C语言里数组可以存储大量相同数据类型的数据,但是数组有个很明显的缺点就是大小固定...

2022-11-04 00:22:18查看全文 >>

文档排行