线性表的顺序数据结构

什么是线性表?

List:0个或多个数据元素的有限序列。

注意:
① 它是一个序列。
也就是说,在这个序列里,元素之间是有序的,若有多个元素,那么第一个元素无前驱,最后一个元素无后继,中间的其他每个元素都有且只有一个前驱和后继。

② 线性表强调是有限的,即列表中元素个数是有限的。(事实上,计算机中处理的对象都是有限的。)
用数学语言定义如下:
若将线性表记为:(a1…ai-1,ai,ai+1…an),则称ai-1是ai的直接前驱元素,称ai+1是ai的直接后继元素。 当i=1,2,…,n-1时,ai有且仅有一个直接后继,当i=2,3,…,n时,ai有且仅有一个直接前驱。如图:
在这里插入图片描述
所以,线性表的元素个数n(n>=0)定义了表的长度,当n=0时,表为空表。

线性表的顺序存储结构

指用一段地址连续的存储单元依次存储线性表的数据元素。顺序存储示意图如下:
在这里插入图片描述
顺序存储结构说白了就是指:在内存中找了一块地方,通过占位的形式,把一块内存空间给占了,然后把相同数据类型的数据元素依次存放在这片空地中。既然线性表的每个数据元素的类型都相同,所以可以用一维数组来实现顺序存储结构。即把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。

线性表中,我们可以通过估算这个表的最大存储容量来建立一个数组,这个数组的长度就是该线性表的最大存储容量。

So,描述顺序存储结构的三个属性:
① 存储空间的起始位置: 就是数组data的存储位置
② 线性表的最大存储容量: 即数组长度MaxSize
③ 线性表当前长度: length

注意:数组长度和线性表长度的区别:
数组长度就是存放线性表的存储空间的长度,存储分配后,数组长度这个量一般是不变的。而线性表的长度是线性表中数据元素的个数,随着线性表插入删除等操作,线性表长度这个量是会发生改变的。

So,在任何时刻,线性表的长度都应该<=数组长度。

顺序存储结构的插入删除:
① 插入: 可以用一个数组{ a1…ai-1,ai,ai+1…an }来表示,假设要将元素m插入到表中ai的位置,那么从最后一个元素开始向前遍历到第i个位置,然后将它们统一向后移动一个位置,然后将m放入ai原本的位置上。如图:

顺序存储结构的插入删除:
① 插入: 可以用一个数组{ a1…ai-1,ai,ai+1…an }来表示,假设要将元素m插入到表中ai的位置,那么从最后一个元素开始向前遍历到第i个位置,然后将它们统一向后移动一个位置,然后将m放入ai原本的位置上。如图:
在这里插入图片描述
代码如下:
在这里插入图片描述
② 删除:与插入思路相同,首先,如果删除位置不合理则抛出异常,其次取出删除元素,然后从删除元素位置开始遍历到最后一个元素位置,分别将他们统一向前移动一个位置,表长-1。代码如下:
在这里插入图片描述

线性表的顺序存储结构,在存读数据时,不管在哪个位置,时间复杂度都是O(1),
而插入和删除时,时间复杂度都是O(n)。

So,顺序存储结构的优点:
① 不用为了表示表中元素之间的逻辑关系而增加额外的存储空间。
② 可以快速的存取表中任一位置的元素。

缺点:
① 插入和删除操作需要移动大量的元素。
② 当线性表长度变化较大时,难以确定存储空间的容量。
③ 造成存储空间的“碎片”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值