线性顺序表

定义

线性顺序表是线性表中一种利用顺序结构实现的数据结构。线性顺序表又被称为线性表的顺序映射或者线性表的顺序存储结构。
它指的是利用一组地址连续的存储单元依次存储线性表的数据元素。

线性顺序表

就如上图所示,线性顺序表的元素之间是连续的。假设线性顺序表的每个元素需要占用d个存储单元,并且规定线性顺序表
第一个存储单元的地址为基地址(首地址)。那么线性顺序表中第i+1个元素的地址和第i个元素的地址有一下关系

对以上公式进行整理,那么可以得出线性顺序表中第i个元素ai的存储位置为

例如:线性顺序表A有存储了5个元素,分别为apple, banana, orange, strawberry, melon; 每个元素所占内存空间为d。
假设A的基地址为loc_base, 也就是a元素存储的地址,也是A1的地址。对应的地址单元存储了apple。那么A2的地址
就是loc_base + d, 对应的地址单元存储了banana。A3的地址就是loc_base + 2d,对应的地址单元存储了orange.

相关操作以及时间复杂度分析

索引(Index)

对于线性顺序表来说,它是随机存取的,任何一个元素只要知道它在线性顺序表的逻辑下标,就可以索引对应在物理地址中存储的元素。
例如:获取线性顺序表A中的第5个元素的值,那么可以通过A5直接索引获取。因此这个操作的时间复杂度为O(1)。

查找(Find)

查找和索引不同点就是索引是根据下标找元素,一定能找到对应的值。而查找是根据给定的值定位在线性表中的位置。
如果线性表中无对应的值一般返回-1或者false。现在表A中存储了n个元素,需要查找元素t在表A中的位置。如果线性顺序表中的元素
是可比较,并且已经排好序的我们可以用二分查找,时间复杂度为O(logn)。但是这是一个一般的表,所以我们只能通过
遍历来查找。因此假设元素t在A中第i个元素被查找到的概率为pi。那么查找对应的数学期望值如下:

现在假设pi都具有相同的概率1/n; 那么对上述表达式进行化简得到如下结果:

再将如上级数进行整理可得

因此查找的时间复杂度为O(n)。

插入(Insert)

插入操作对于线性表来说应该是由两个步骤组成。一,定位插入点将插入点之后的元素往后移动。二,插入元素。
而这两个步骤对时间复杂度起决定性因素的是步骤一。因为步骤二的时间复杂度显然是O(1)。现在,对步骤一进行
时间复杂度的分析。假设表A中存储了n个元素,现在要把元素t插入到A表中的第i个元素之前。那么我需要将第i,i+1,i+2,……,n个
元素都往后移动一个位置。对于这个移动步骤的需要消耗的时间是O(n-i+1)。假设插入到第i个元素之前的概率为pi
则插入的数学期望值如下:

这里为什么是n+1,因为元素有n个,那么插入的位置就有n+1个。现在假设每个插入的位置的概率pi都是1/(n+1);
化简整理上述表达式得到如下结果:

再将如上级数化简进行整理可得

因此插入的时间复杂度为O(n)。

删除(Delete)

删除操作和插入操作正好相反,它也有两个步骤。一,删除元素。二,将后面的元素往前移动一个位置。这两个步骤对时间复杂度
起决定性因素的是步骤二。因为步骤一的时间复杂度显然是O(1)。(当然如果不是通过下标删除,而是通过给定元素删除的话
就是花费查找的时间O(n), 这里我们只讨论是通过下标删除)现在对步骤二进行分析。假设表A中存储了n个元素,现在要删除A表中的第i个元素,
则第i+1, i+2, ……, n个元素都要往前移动一个位置。对于这个移动步骤的需要消耗的时间是O(n-i)。假设删除第i个元素的概率为pi
则删除的数学期望值如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值