线性表:零个或多个数据元素的有限序列。
线性表,从名字上可以感觉到,是具有像线一样的性质的表。
官方定义: 线性表(List):零个或多个数据元素的有限序列。
注意;
其结构如下图:
线性表元素的个数n(n≥0)定义为线性表的长度,当n=0时,称为空表。在非空表中的每个元素都有一个确定的位置,如a1是第一个元素,an是最后一个元素,ai是第i各元素,i称为数据元素ai在线性表中的位序。
在较复杂的线性表中,一个元素可以由若干个数据项组成。
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
这里强调两点:
如图:
通俗地讲,线性表的顺序存储结构,就是在内存中找块地儿,通过占位的形式,把一定的内存空间给占了,然后把相同数据类型的数据元素依次存放在这块空地。
可以用一个一维数组来实现顺序存储结构,即把第一个数据元素存到数组下标为0的位置,接着把线性表相邻的元素存储在数组中相邻的位置。
我们发现描述存储结构三个重要的属性:
所以:线性表长度≤数组长度
线性表的第i各元素存储在数组下标为i-1的位置,如下图:
这个图也体现了数组长度和线性表长度的关系。用数组存储顺序表意味着要分配固定长度的数组空间,由于线性表中可以进行插入和删除操作,因此分配的数组长度空间应该大于等于当前线性表的长度。
存储器中的每个存储单元都有自己的编号,这个编号叫做地址。
对于线性表的顺序存储结构来说,我们要实现getElem操作,即将线性表L中的第i个元素值返回,直接将数组第i-1下标的的值返回即可。
如果已知第一个元素的地址,和每个元素所占内存大小,即可算出第i个元素的内存地址,时间复杂度为O(1)。
插入算法思路:
删除算法思路:
总的来说,线性表的顺序存储结构:读取快,增删慢。
优点:
缺点: