数据结构与算法笔记(2) - 线性表之顺序表

1. 什么是线性表

线性表是一些元素的序列,它维护着元素之间的一种线性关系。
元素为空的表称为空表,元素的个数为表的长度,元素的位置为该元素的下标。
除了首元素外,其余元素有且只有一个前驱元素;除了尾元素外,其余元素有且只有一个后继元素。

2. 顺序表

线性表的实现主要有两种:顺序表、链表
顺序表:表中元素是按照一定的顺序存放在一块足够大的连续的内存中,首元素放在开始位置,其余元素依次放置,元素之间的逻辑关系通过其物理位置表示。

2.1 元素的计算

对顺序表中元素的存取操作可以在 O(1) 时间内完成。

设顺序表存储区的起始位置(内存地址)为 l0 ,元素标号从 0 开始,元素 e0 的内存位置 Loc(e0)=l0 。表中每个元素需要的存储单元数为 c=size 。那么,元素 ei 的计算公式为: Loc(ei) = l0 + c*j

2.2 基本实现

在python中,列表是一种元素个数可变的线性表。因为列表对象的标识(id)不变,且元素个数课表,所以列表采用了分离式技术实现的动态顺序表。
分离式技术将表头信息和元素分开存储,能够保证在元素个数加到需要更换更大的存储空间时,列表对象 id 保持不变。

2.3 时间复杂度

对 python 中的列表进行操作

  1. len() 是 O(1) 操作,表中记录了元素个数;
  2. 通过下标访问元素,赋值,尾端加入和删除都是 O(1) 操作
  3. 一般位置的加入、切片、删除、拼接都是 O(n) 操作

对于 python 列表,没有考虑当前存储空间容量的问题,这些都是内部实现,当存储空间满时,会替换一块容量更大的空间。Python的实现是:

  1. 创建 list 时会分配一块能保存 8 个元素的存储空间;
  2. 当执行插入操作时,如果存储区满就换一块 4 倍大的存储区(为了降低更换存储区的频率);
  3. 如果表已经很大,目前默认是(50000),替换存储区时容量加倍(为了避免过多的空闲存储区);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值