数据结构(三)——线性表

线性结构特点:在数据元素的有限集中,除了第一个元素无直接前驱,最后一个元素无直接后续以外,每个数据元素有且只有一个前驱元素和直接后续元素

线性表及抽象数据类型

1. 线性表定义
线性表(linear list) )是n个类型相同数据元素的有限序列,通常记作(a 0 , a 1 , …a i-1 , a i , a i+1 …,a n-1 )。相邻元素存在序偶关系

2. 线性表的抽象数据类型
ADT List{
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
} ADT List
定义了11 种操作

线性表的顺序存储与实现

线性表的顺序存储是用一组地址连续的存储单元依次存储线性表的数据元素
顺序存储的特点 以数据元素在机内存储地址相邻来表示线性表中数据元素之间的逻辑关系。——数组实现
在这里插入图片描述

  1. 插入操作
    在这里插入图片描述
    时间复杂度分析:平均情况的运行时间
    假设在数组下标[0,n]范围内任何一个位置i处插入数据元素的概率是相等的。
    在这里插入图片描述
    假设Ci是在数组下标为i的位置插入数据元素时需要移动数据元素的次数,ci = n-i
    此时在数组下标i处插入一个数据元素需要移动数据元素的平均次数为
    在这里插入图片描述
  2. 删除操作
    在这里插入图片描述
    在这里插入图片描述

线性表的链式存储与实现

链式存储:用指针将存储线性表中数据元素依次串联,需要在每个单元中设置指针来表示表中元素的逻辑关系,增加额外的存储空间开销。

1. 单链表:至少两个域,一个域用于数据元素的存储,另一个域指向其他单元的指针
在这里插入图片描述
在这里插入图片描述
尾结点特征时next引用为空
注意:单链表中只能通过前驱节点找到后续节点(无前驱指针域——双向链表)

  1. 单链表中插入节点:在已知某个特定节点引用的基础上在后面插入一个新的节点。(分为表头、表尾以及链表中间插入节点的过程)

2.双向链表
在这里插入图片描述
在这里插入图片描述
2. 插入操作
在这里插入图片描述
在这里插入图片描述
3. 删除操作
在这里插入图片描述
在这里插入图片描述

线性表的单链表实现

1. 使用单链表实现
添加头结点:不存储任何实质的数据对象,next域指向0号元素所在的节点,
在这里插入图片描述
在这里插入图片描述
三个成员变量
时间复杂度整理(有问题)

操作双向链表/单链表
getSize()、isEmpty()O(1)
getPreNode(Object e)Θ(n)
插入/删除Θ(n)
replace(int i Object e)Θ(n)

两种实现比较

1.基于时间比较

线性表操作顺序存储 /链式存储
查找:基于序号Θ(1)/需要从投机诶的那开始查找:O(n)
查找:基于元素查找都需要从序号为0的元素开始查找:Θ(n)
插入(基于元素)顺序查找定位相应元素 / 链式存储只需要在定位元素基础上移动指针
插入(基于序号)顺序存储需要移动一半元素/链式不能直接定位,也需要移动一般元素
  1. 基于空间的比较
存储结构存储空间
顺序存储预先静态分配
链式存储动态分配

链接表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值