线性表的顺序存储和链式存储方式在存读数据以及插入删除数据时,时间复杂度不同。
顺序存储的典型例子为数组,链式存储的典型例子为单链表。众所周知,当读取数据较为频繁时,我们选择顺序存储方式,当插入和删除操作较为频繁时,我们选择链式存储方式。接下来,我们将分析这样做的原因:
1.顺序存储:
1)在读取数据时,读取任意位置i的元素,都可以用a[i]获得,因此,时间复杂度为o(1).
2)在插入和删除数据时,不可能总是处理最后一个元素,对于其他任意位置i对应元素的处理,若是插入,需要将i之后的元素从最后一个元素开始均向后平移一个单位,若是删除,需要将i之后的元素从i+1个元素开始均向前平移一个单位。因此,时间复杂度为o(n).
2.链式存储:
1)在读取数据时,读取任意位置i的元素,均需从a1开始往后遍历,直至ai,因此,时间复杂度为o(n).
2)在插入和删除数据时,也需要从a1开始往后遍历,直至ai处,因此时间复杂度也为o(n).
那么问题来了,毫无疑问,从时间复杂度上来看,读取数据选择时间复杂度为o(1)的顺序存储方式,但是,插入和删除操作下,两种存储方式的时间复杂度均为o(n),为什么要选择链式存储结构呢?
这主要是因为,当在某一个位置连续插入或删除多个数据时,对于顺醋存储结构而言,每次操作的时间复杂度均为o(n),而对于链式存储结构而言,只有第一次时间复杂度为o(n),之后的每次操作时间复杂度均为o(1),因此,我们说,当频繁的进行插入和删除操作时,选择链式存储结构。
除此之外,值得一提的是,顺序存储结构有以下的优缺点:
优点:
1)没有因为要表示元素之间的逻辑关系而增加额外的存储空间。
2)快速的存读表中的任意位置元素。
缺点:
1)插入和删除需要移动大量的元素。
2)线性表长度变化较大时,难以确定存储空间的容量。
3)容易造成存储空间的碎片。