数据结构-线性表(顺序存储与链式存储)

    所谓的线性表是数据结构的一种。定义为零个或者多个数据元素的有限序列。

    线性表分为顺序存储结构与链式存储结构。

    (1)顺序存储结构通俗来说就是我们平常熟悉的数组,他就是一种典型的顺序存储结构。我们都知道数组有自己的长度,并且一旦长度确定后不可以进行改变(不是绝对的)。说起顺序存储结构(数组)我们就应该考虑一下他是怎么存储的。当我们创建一个数组的同时,会在内存空间内寻找一块连续的存储单元进行存储。

    1.存取(get set)    

    对于数组我们平常最多的操作肯定就是存取值。当我们想取一个值的时候是通过索引去取值的那么这个过程中不会对其他元素的位置进行改变。所以这个过程中的时间复杂度为O(1)。当我们想数组中存一个值时,只需要像末尾追加一个就好。但是要注意不可以超过数组的最大长度。

    2.插入与删除

    线性表的顺序存储结构的插入就相当于我们在排队的过程中突然出现一个插队的人。如果这个插队的人想要顺利的进入队伍那么就需要从他插入的位置后的所有人都像后移动一个位置。这里的人就相当于我们的数据元素。位置相当于我们的存储单元。所以此时的时间复杂度为O(n)。这里还存在一个情况像排队的队尾插入那么这时复杂度为O(1)。那么元素插入到i个位置。需要移动n-i个元素,由于每个位置插入元素的可能性是相同的。所以平均移动次数为 n-1/2。那么他的平均时间复杂度还是O(n)。

    线性表的顺序存储结构的删除就相当于我们刚才排队插队的那个人被其他人撵走了,那么他就算是插队失败了。正好符合我们元算在线性表顺序存储结构在删除时候的特性。删除一个元素的同时所有人都要向前移动一个位置。并且也会出现在队尾的时候删除元素的情况。所以根据上面插入情况时间复杂的分析。线性表的顺序存储结构的删除操作的平均时间复杂度也是O(n)。

    那么我们了解了线性表的顺序存储结构的存储特点。那么他们适合应用再怎么样的场景中呢?他们各自的优缺点呢?

    优点:

    (1)因为顺序存储结构属于在内存中划分的一块连续的内存空间。所以不需要为复杂的逻辑关系增加额外的存储空间,因为在线性表顺序存储结构中每个元素都只有一个直接前驱还有一个直接后继。

    (2)可以快速的get或者set其中的任意元素并且平均时间复杂度为O(1)。

    缺点:

    (1)当进行插入与删除操作时候需要进行大量的元素移动。

    (2)线性表长度较大时候,不能确定存储空间的容量。

    (3)容易造成空间碎片。(待理解)

未完待续(喜欢关注)

你可能感兴趣的:(数据结构-线性表(顺序存储与链式存储))