Day10

本文详细介绍了线性数组的概念及其性质,并进一步探讨了线性数组的一种抽象和泛化形式——向量。包括向量的构造方法、访问方式、空间管理策略等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

早上醒来,发现自己对于昨天糟糕的面试体验还是挺耿耿于怀的,所以整个白天放空了一天,晚上终于觉得心里疙瘩少一些了,开始按照计划继续复习。

数组
若集合S由n个元素组成,且各元素之间具有一个线性关系,则可将它们存放在起始于地址A,物理位置连续的一段空间内。记作数组A
对于任何0<= i < j < n, A[i]都是A[j]的前驱,A[j]是A[i]的后继,对于任何 i>=1,A[i-1]都是A[i]的直接前驱,对于任何 i<= n-2, A[i+1]都是A[i]的直接后继。
任何元素的所有前驱构成其前缀,所有后继构成其后缀。
若数组A[]存放空间的起始地址为A,每个元素占s个单位的物理空间,则元素A[i]的物理地址为 A+i*s ,因为A的元素下标和其物理地址满足这样线性的关系,数组A又称为 线性数组

向量
线性数组的一种抽象和泛化,所有数据项的物理存放位置与其逻辑上的次序完全吻合,这个逻辑上的次序成为“秩”。
比如 向量 V= { v0, v1, … v(n-1)}, 其中元素e前有r个元素,则元素e的秩为r,
即 e = v(r)也成立,这种向量特有的访问方式称为“循秩访问”。
向量中秩为r的元素,对应于内部数组_element[r],其物理地址为_element+r。

向量默认的构造方法:首先根据创建者指定的初始容量向系统申请相应大小的空间,用以创建内部数组,如果没有指定初始容量则使用默认容量。由于新生成的向量还不包含任何元素,所以将代表向量规模的变量初始化为0。整个过程顺序进行,没有迭代,如果忽略为数组分配空间的时间,则时间复杂度为常数。

向量另一典型创建方式为以已有的向量或数组为对象进行整体或部分克隆。若忽略为数组分配空间的时间,时间复杂度为常数。

向量的析构:只需释放用于存放元素的内部数组即可,将其空间返还给操作系统,如果不计释放内部数组时所用时间,则析构的时间复杂度为O(1)。

静态空间管理:如果内部数组的物理空间容量在向量的生命周期内不允许调整,则称为静态空间管理策略。该策略的空间效率难以保证。容易“上溢”。
向量的实际规模和其内部数组的容量的比值称作“装填因子”。

动态空间管理:可扩充向量。即,当内部数组A满了的时候,重新申请更大的内部数组B,将A内容复制到数组B中,释放A数组,对数组B进行(添加新元素)操作。
所以每次扩容从n到2n,需要的时间最坏为O(n),分摊复杂度为O(1)。
缩容:当装填因子小于某个阈值,会发生“下溢”,影响效率,所以当装填因子远远小于某阈值时,新申请一个数组,容量为之前的一半,将旧数组拷贝到新数组中,释放旧数组。分摊复杂度为O(1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值