一、线性表的顺序存储结构及其属性
用一段地址连续的存储单元,一次存储线性表的数据元素。顺序存储结构需要三个属性。存储空间的起始位置:数据data,它的存储位置就是存储空间的存储位置;线性表的最大存储容量:数组长度MaxSize;线性表的当前长度。
二、顺序存储方式
线性表的顺序存储结构,就是在内存中找到一块空间,然后把相同的数据类型的数据元素依次放在这块空间中,由于线性表的数据元素的类型都相同,可以用C语言的一维数组来实现顺序结构存储结构,把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。
三、数组长度与线性表长度的区别
数组的长度是存放线性表的存储空间的长度,存储分配后这个量一般是不变的;而线性表的长度是线性表元素的个数,随着线性表插入和删除操作的运行,这个量是变化的。因此,在任意时刻,线性表的长度应该小于或等于数组的长度。
四、地址计算方式
由于根据线性表的定义,起始位置都是从1开始的,但是C语言中的数组却是从0开始第一个下标的,于是线性表的第i个元素是要存储在数组下标为,i - 1的位置,即数据元素的序号和存放它的数组下标之间存在对应关系。
用数组存储顺序表意味着要分配固定长度的数组空间,由于线性表中可以进行插入和删除,因此分配的数组空间要大于或等于线性表的长度。
五、地址
内存中的地址都是有编号的,存储器中的每个存储单元都有自己的编号,这个编号统称为地址。由于每个元素,不管它是整型、实型还是字符型,它都是需要占用一定的存储单元空间
六、元素的获取操作
对于线性表的顺序结构来说,如果我们要实现GetElem操作,即将线性表L中的第i个元素返回,其实是非常简单的,就程序而言,只要i的数值在数组小标范围内,就是把数组第i - 1下标的元素返回即可。
七、插入算法的思路
如果插入位置的不合理,抛出异常;如果线性表长度大于等于数组的长度,即抛出异常或动态增加容量;从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;将插入元素填入位置i处;表长加1.
八、删除操作
如果删除位置不合理,抛出异常;取出删除元素;从删除元素的位置开始遍历到最后一个元素位置;表长减1.
九、插入和删除的时间复杂度
如果元素要插入到最后一个位置,或者删除到最后一个元素,此时时间复杂度为O(1),因为不需要移动元素,如果一个玉安素要插入到第一元素,此时时间复杂度为O(n),那就意味着要移动所有的元素向后或者向前。
十、线性表顺序存储结构的优缺点
线性表的顺序存储结构,在存取、读取时,不管是哪个位置,时间复杂度都是O(1);而插入删除时,时间复杂度都是O(n)。这就说明,它比较适合元素个数不太变化,而更多的是存取数据的应用。
其有点是无需为表示表中元素之间的逻辑关系而增加额外的存储空间,可以快速的存取表中任意位置的元素;插入和删除操作需要移动大量元素,当线性表长度变化较大时,难以确定存储空间的容量,造成存储空间的“碎片”。